3 Verschiedene SQL Abfragen per URL steuern

maga147

Erfahrenes Mitglied
Hi,

ich hab mir schon halb den Kopf zerbrochen und komme immer noch nicht zu ner vernünftigen lösung....

Ich habe einen Terminkalender, der per URL gesteuert verschiedene Datenbankausgaben machen soll....

?date=2006-07
soll alle Termine des Monats 07 (Juli auslesen)

SELECT * FROM eventkalender WHERE ?


?date=2006-07-26
soll alle Termine des 26.07.2006 auslesen
SELECT * FROM eventkalender WHERE date = $_GET['date']


und der aufruf direkt soll alle Termine auslesen...
SELECT * FROM eventkalender

Aber wie kann ich das realisieren? Ich hab absolut keinen Schimmer mehr....

Wie die Daten in der Tabelle gespeichert werden sollen, ist mir egal, da richte ich mich nach ner funktionierenden Lösung.... Bisher werden die per Timestamp gespeichert, aber ich bin auch bereit die Struktur zu ändern...
 
alle Abfragen sollten am besten über SQL-Statements bearbeitet werden. Somit bekommst Du nur das zurück was Du brauchst.

Vielleicht als Ansatz:
Eine Spalte in der DB in der das Datum (Tag,Monat,Jahr) eingetragen wird, und eine Spalte nur der Monat inkl. Jahr.
 
Loveboat hat gesagt.:
alle Abfragen sollten am besten über SQL-Statements bearbeitet werden. Somit bekommst Du nur das zurück was Du brauchst.

Vielleicht als Ansatz:
Eine Spalte in der DB in der das Datum (Tag,Monat,Jahr) eingetragen wird, und eine Spalte nur der Monat inkl. Jahr.


Danke, wär theoretisch möglich, aber meinst du nicht, dass das zu umständlich und doppelte einträge speichern ist ja auch nicht soooo Resourcen schonend ;)

Kann man eigentlich bei ner SQL Anfrage "explode()" nutzen?
 
doch klar kannst!
Entweder legst du das datum als time stamp ab und formatierst es nach dem auslesen!
oder du trennst einfach das datum über die php string funktionen!
 
Zuletzt bearbeitet:
In dem Fall müsstest du dann doch den Wert auseinandernehmen, etwa:
PHP:
if( !preg_match('/^([0-9]{4})(?:-([0-9]{2})(?:-([0-9]{2}))?)?$/', $_GET['date'], $match) ) {
	echo 'Ungültiges Format';
} else {
	switch( count($match) - 1 ) {
		case 1:
			$query .= ' WHERE YEAR(`date`) = '.$match[1];
			break;
		case 2:
			$query .= ' WHERE YEAR(`date`) = '.$match[1].' && MONTH(`date`) = '.$match[2];
			break;
		case 3;
			$query .= ' WHERE `date` = "'.$_GET['date'].'"';
			break;
	}
}
 
öhh.. gumbo, könntest du mir dann noch bitte sagen, wie die Tabelle auszusehen hat Also per Timestamp oder wie?
 
Hallo!

Wenn ich Gumbo seinen Code richtig deute, müsste der Spaltentyp DATE und das Datum in der Form YYYY-MM-DD eingetragen sein.

Gruss Dr Dau
 
Hi,


vielen vielen Dank :) Ich habs jetzt mit der Hilfe von Gumbo und Dr Dau geschafft :) :)

Danke!


EDIT:

Eins noch, Wie kann man denn diesen date Wert vergleichen? Also ich möchte eigentlich nur die Datenbankeinträge, die "neuer" sind, als "heute" also "WHERE date > ?="

danke!

EDIT2.

Ich habs.... WHERE date >= NOW() .....

Danke für alles! Das hier ist wirklich ein Klasse Forum mit tollen Leuten und enorm viel Inhalt
 
Zuletzt bearbeitet:
Zurück