MYSQL Problem bei Datumsabfrage

mario-a

Grünschnabel
Hallo,

ich habe hier schon gesucht aber nicht gefunden.....

Ich habe in meiner Datenbank 2 Datumsdatensätze die die Gültigkeit von Artikeln festlegen.

Also datum_von und datum_bis.

Meine Abfrage funktioniert aber nicht

PHP:
$heute=time();
SELECT *, UNIX_TIMESTAMP(datum_von) AS datum_von, UNIX_TIMESTAMP(datum_bis) AS datum_bis FROM $db_web_kat WHERE aktiv=1 and navigruppe=0 and von<$heute and bis>$heute";
 
navigruppe=0 and von<$heute and bis>$heute

DA liegt das problem - die PHP-Variablen erzeugen eine Zeichenkette, die in SQL in Anführungszeichen gehört. Normalerweise solltest Du mit "echo mysql_error();" den Fehler auch gezeigt bekommen.
Richtig heisst es also:

PHP:
$SQL ".......and von< '$heute' and bis> '$heute'"
desweiteren macht ein Wert der grösser ist als "heute" auch keinen rechten Sinn ^^

LG
Andy
 
Danke für euren schnellen Antworten

Wo genau liegt der Fehler?
Es wird nichts selektiert. Wenn ich denn Datumskram rausnehme ist alles da....

DA liegt das problem - die PHP-Variablen erzeugen eine Zeichenkette, die in SQL in Anführungszeichen gehört. Normalerweise solltest Du mit "echo mysql_error();" den Fehler auch gezeigt bekommen.
Richtig heisst es also:

PHP:
$SQL ".......and von< '$heute' and bis> '$heute'"
desweiteren macht ein Wert der grösser ist als "heute" auch keinen rechten Sinn ^^

LG
Andy
Also das habe ich jetzt mal probiert, aber es geht noch nicht.
Ich erhalte die Fehlermeldung "Unknown column 'von' in 'where clause'"

Größer als heute ist für Artikel die automatisch offline gehen sollen zb. ab dem 01.09.2007

Gruss
Mario
 
Die Fehlermeldung sagt dir doch alles... es gibt keine Spalte die von heißt.

Schau nochmal in der Datenbankstruktur welche spalte es wirklich sein sollte.
 
kommt drauf an in welchem Format dein "datum_von" definiert ist. Um Zeiten/Datumse :D zu vergleichen,nimmst Du in der DB am besten einen INT-Wert,damit lässt sicheinfacher rechnen. Wie gesagt gehört dein "$heute" in Anführungszeichen...
 
datum_von und datum_bis sind beides Datumsfelder 0000-00-00.

Dieses Feld möchte ich jetzt bei der Abfrage halt gleich in nen Timestamp umwandeln um es mit der aktuellen Zeit zu vergleichen. Leider klappts nicht...

Kann ich denn Select mit "*" und "UNIX_TIMESTAMP(datum_von) AS von" verwenden?
 
Kannst Du im Grunde schon, kommt aber auch darauf an,wie performant Deine DB sein soll. ein "SELECT * FROM TABLE" ist meist nicht ganz sinnvoll, wenn Du zig Felder hast und quasi alles auswählst.Besser, Du differenzierst das etwas bzw sagst beim select näher,was Du brauchst,somit muss der Index der DB nicht erst alles abgrasen,ob Deine Suche so hinhaut und die Feldermehr als "nichts" (NULL) zurück geben.

zu deinem Datums-Problem:
Wandel mal dein datum_von und datum_bis in einen DATETIME oder TIMESTAMP um, dann sparst Du schon mal das UNIX-TIMESTAMP.
Füllen tust Du das Feld ja eh von PHP aus,das geht ganz einfach:

PHP:
$heute = date("Y-m-d H:i:s");
$SQL = "INSERT INTO tabelle (datum_von) VALUES('$heute')";
mysql_query($SQL);

Und holst das ganze dann so raus:
PHP:
$SQL = "SELECT datum_von,datum_bis FROM tabelle WHERE datum_von < DATE_SUB(datum_von, INTERVAL 1 DAY) AND datum_bis > DATE_ADD(datum_bis, INTERVAL 1 DAY)";
mysql_query($SQL);
Um jetzt einen Timestamp zu haben, machst Du im PHP beim durchlaufen des Result-Arrays ganz einfach mit dem erhaltenen Datum nur ein "strtotime($datum_von)"
 
zu deinem Datums-Problem:
Wandel mal dein datum_von und datum_bis in einen DATETIME oder TIMESTAMP um, dann sparst Du schon mal das UNIX-TIMESTAMP.

Das heißt also umstellen der Datenbank, also statt Datum gleich den Timestamp ablegen.
Das wollt ich eigentlich umgehen, aber da werd ich das morgen mal probieren.

Danke schon mal, ich meld mich dann wenns läuft oder auch nicht ;-)
 
Zurück