Datensätze bedingt ausgeben

suntrop

Erfahrenes Mitglied
Hi,

vor einigen Tagn habe ich hier http://www.tutorials.de/forum/php/2...-ueber-mysql-ausgeben-gebrauchsanleitung.html nachgefragt wie ich ein Datum speichern sollte um anhand dessen einen Datensatz ausgeben zu lassen.

Jedenfalls habe ich für Tag, Monat und Jahr jeweils ein Feld in meiner DB. In meiner Website habe ich drei Auswahlfelder (<select>) für Tag, Monat und Jahr.
Die Abfrage der DB sieht momentan so aus
PHP:
$sql = "SELECT * FROM  tabelle WHERE sort_day='".$sort_day."' AND sort_month='".$sort_month."' AND sort_year='".$sort_year."' ORDER BY id DESC LIMIT 0,".$sort_quantity;
Wenn der Nutzer ein ganz bestimmtes Datum wie 26.11.2007 angibt, dann wird auch nur der Datensatz mit diesen Feldern ausgegeben. Wenn der Nutzer jedoch z.B. alles aus dem Monat Oktober sehen möchte und das erste Auswahlfeld leer lässt, dann wird gar nichts ausgegeben. Weil nach einem "leeren Tag" gesucht wird. Eine Wildcard wäre nicht schlecht wie *. Davon habe ich jedoch noch nichts gehört.

Kann ich das nur über eine IF-Abfrage realisieren? Das wären sieben Kombinationsmöglichkeiten. Und wie sollte die am besten aussehen?

Oder gibt es noch eine andere Möglichkeit?

Ich hoffe das war verständlich wie ich das beschrieben habe ;-)

Danke für eure Hilfe.

Grüße
suntrop
 
ich würde das in der Tat mit if Abfragen machen. Oder eben über Switch Case.

wenn Tag-Feld leer ist : SQL1
wenn Monat-Feld leer ist SQL2
wenn JahrFeld leer ist: SQL3
wenn Tag Monat und Jahr ausgefüllt ist SQL4

etc etc
 
Du musst natürlich die Eingabewerte prüfen und nicht einfach direkt übernehmen. So könntest du beispielsweise die Anfrage je nach Eingabewerten zusammensetzen, beispielsweise:
PHP:
$sql = 'SELECT * FROM  tabelle WHERE 1';
if( !empty($sort_day) ) {
	$sql .= ' AND sort_day="'.$sort_day.'"';
}
if( !empty($sort_month) ) {
	$sql .= ' AND sort_month="'.$sort_month.'"';
}
if( !empty($sort_year) ) {
	$sql .= ' AND sort_year="'.$sort_year.'"';
}
$sql .=' ORDER BY id DESC LIMIT 0,".$sort_quantity;
Ich hoffe natürlich, dass du die Eingabewerte auch validierst.
 
Danke an euch beide.

Der Code sieht richtig edel aus. An die Verkettung hatte ich auch mal kurz gedacht, nur wäre mein Code dreimal solange und komplex gewesen.

Ich hoffe natürlich, dass du die Eingabewerte auch validierst.
Klar, das ist selbst für mich als Anfänger selbstverständlich :-) Auch wenn nur ganz wenig Leute passwortgeschützt darauf Zugriff haben.


Also nochmals Danke für die Antworten.

Grüße
suntrop
 
Zurück