thoomaas
Goto Top

MySQL Suche Einträge älter als Datum XXX

Hallo alle zusammen,

nach langem probieren und suchen bei Google bin ich leider nicht fündig geworden bzw. konnte es nicht auf meine Bedürfnisse abändern.

Ich habe eine SQL-Abfrage die so aussieht:
$ausgabe = "SELECT * FROM table WHERE Kategorie LIKE 'XYZ' AND falligkeitsdatum < '$date' AND sichtbar = 1 AND team LIKE '%".substr($abteilung, 7)."%' OR team LIKE 'XYZ' OR falligkeitsdatum LIKE '$date' AND sichtbar = 1 AND team LIKE '%".substr($abteilung, 7)."%' OR team LIKE 'XYZ'";  

Es mag euch nicht 100% gefallen wie ich meine Abfrage gestaltet habe. Es funktioniert soweit, jedoch bekomme ich alle Einträge angezeigt anstatt die Einträge die älter als $date und mit dem Wert von $date.

$date beinhaltet das heutige Datum. Könnt ihr mir weiter helfen?

Ich möchte eine Ausgabe, die mir alle DB-Einträge mit dem Datum heute oder älter ausgibt.

Danke, Gruß
Thoomaas face-smile

Content-ID: 300378

Url: https://administrator.de/contentid/300378

Ausgedruckt am: 16.11.2024 um 19:11 Uhr

ukulele-7
ukulele-7 30.03.2016 um 11:47:45 Uhr
Goto Top
Du hast die Bedingungen falsch verkettet bzw. nicht geklammert. Beispiel: Jeder Datensatz wo team LIKE 'XYZ' ist wird angezeigt. Du brauchst etwas wie A und ( B oder C ).
114757
Lösung 114757 30.03.2016 aktualisiert um 12:27:17 Uhr
Goto Top
Moin.
Es mag euch nicht 100% gefallen wie ich meine Abfrage gestaltet habe.
Joa, das schreit förmlich nach SQL Injection face-smile

Und für das aktuelle Datum gibt es in MySQL schon die Funktion CURDATE(), eine extra Variable dafür braucht es also eigentlich nicht.

Ich hoffe ihr verwendet für eure Datumsspalte auch tatsächlich das Datumsformat in der Datenbank und nicht Strings.

Gruß jodel32
Thoomaas
Thoomaas 30.03.2016 aktualisiert um 12:55:51 Uhr
Goto Top
@ukulele-7
Das verstehe ich nicht ganz...Hast du ein Beispiel anhand meines Codes für mich? face-smile


@114757
Das ist das Problem.

Ich brauche das Format dd.mm.yyyy

Deshalb ist es leider Gottes in Strings. Bin ich kein Fan von, aber was ich nicht ändern kann nech...

Aus diesem Grund bin ich den Umweg mit der Variable gegangen. Auch wenn es nicht schön ist, kannst du mir helfen vielleicht etwas aus dem bestehenden zu basteln? face-smile
Thoomaas
Thoomaas 30.03.2016 aktualisiert um 12:56:23 Uhr
Goto Top
EDIT: Doppelt abgeschickt..
Thoomaas
Thoomaas 30.03.2016 aktualisiert um 13:19:19 Uhr
Goto Top
Mit
SELECT * FROM protocol WHERE Kategorie LIKE 'XYZ' AND falligkeitsdatum < CURDATE() OR falligkeitsdatum = CURDATE() AND sichtbar = 1 AND team LIKE '%".substr($abteilung, 7)."%' OR team LIKE 'XYZ'   
geht es jetzt. face-smile

Mal schauen wie ich es für den User nun lesbar mache...Hierbei könnte ich ggf. auch Hilfe gebrauchen. Bastle gerade daran rum. Habe schon date_format($td['falligkeitsdatum'], 'd/m/y') versucht, jedoch kommt dort keine Ausgabe zustande...

$td['falligkeitsdatum'] beinhaltet bei mir den Wert (zum Beispiel) 2016-04-20....Ich möchte es jedoch in 20.04.2016 angezeigt bekommen. Wenn der User es auf 05.08.2016 ändert soll er es logischerweise in die Datenbank als 2016-08-05 eintragen. Kann mir hier jemand helfen?
114757
Lösung 114757 30.03.2016 aktualisiert um 13:41:25 Uhr
Goto Top
$td['falligkeitsdatum'] beinhaltet bei mir den Wert (zum Beispiel) 2016-04-20....Ich möchte es jedoch in 20.04.2016 angezeigt bekommen.
Wenn du das in PHP meinst so:
$date = new DateTime($td['falligkeitsdatum']);  
echo $date->format('d.m.Y');  
oder
echo date_format(new DateTime($td['falligkeitsdatum']),"d.m.Y");  
oder
echo date_format(date_create($td['falligkeitsdatum']),"d.m.Y");  
Was du nutzt bleibt dir überlassen.
ukulele-7
ukulele-7 30.03.2016 um 13:24:21 Uhr
Goto Top
Zitat von @Thoomaas:
geht es jetzt. face-smile

Du meinst das mit dem Datumsformat oder deine WHERE-Bedingung?
Thoomaas
Thoomaas 30.03.2016 um 13:26:22 Uhr
Goto Top
Er gibt mir jetzt das aus, was ich haben möchte - das klappt. Jedoch möchte ich es auch für den "DAU" nutzbar machen. D.h. das Datumsformat ändern. Ich sehe gerade deinen Lösungsansatz. Ich probiere das mal eben aus. face-smile
114757
114757 30.03.2016 aktualisiert um 13:35:11 Uhr
Goto Top
In der SQL Query könnte man das aber auch direkt mit folgender Funktion machen wenn man das wollte:
Select DATE_FORMAT(falligkeitsdatum ,"%d.%m.%Y") as MeineNeueFormatierteSpalte, protocol.* FROM  .......  
http://www.w3schools.com/sql/func_date_format.asp

RTFM sag ich nur, steht alles in den Funktionsbeschreibungen, man muss es nur mal ab und zu lesen... face-wink
Thoomaas
Thoomaas 30.03.2016 um 13:36:08 Uhr
Goto Top
Zitat von @114757:
> $date = new DateTime($td['falligkeitsdatum']);  
> echo $date->format('d.m.Y');  
> 

Das funktioniert 1A! Er gibt das Datum korrekt aus. Das umformen beim abspeichern ist ja ein leichteres. Jedoch befindet sich meine Ausgabe aus der DB in einer Schleife und ihn haut's aus der Schleife raus. D.h. er kommt bis zu dem Teil deines Codes und danach fliegt er raus und hört auf. Woran kann das liegen? Eine Fehlermeldung bekomme ich nicht.

EDIT: Nevermind. Jetzt war ich gerade der DAU! Einfach nur $date->format('d.m.Y'); schreiben und dann echo $date; geht nicht. Habe es gelöscht indem ich "$datenew =" for dem date->format gesetzt habe. Jetzt geht es face-smile Danke!!

Das gleiche kann ich nutzen, um es beim speichern wieder "anders herum" zu schreiben oder? In dem fall dann:
$datenew = new DateTime($td['falligkeitsdatum']);  
$falligkeitsdatum = $datenew->format('d.m.Y');  
114757
Lösung 114757 30.03.2016 aktualisiert um 13:40:20 Uhr
Goto Top
Das gleiche kann ich nutzen, um es beim speichern wieder "anders herum" zu schreiben oder?
sicher, steht ja alles zur Behandlung von Datumswerten hier:
http://php.net/manual/de/function.date.php
Wer des Lesens mächtig ist ... face-wink
Thoomaas
Thoomaas 30.03.2016 um 13:40:22 Uhr
Goto Top
Da habe ich es her. face-wink Wollte nur auf Nummer sicher gehen, ob ich es richtig verstanden habe. face-smile

Besten Dank!