Timestampdiff(???)

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Timestampdiff(???)

Postby juergen&lx » 01. January 2009 15:30

Hallo,

ein GESUNDES NEUES JAHR 2009 wünsche ich allen Wissenden und Unwissenden, allen Fragenden und Antwortenden,

Zu meiner Frage:

In einem anderen Thread (viewtopic.php?f=7&t=32571) hatte ich eine ähnliche Frage gestellt.
Jetzt möchte ich ein datetime-Feld `date_expires` auswerten.

Bei MySQL ( http://dev.mysql.com/doc/refman/5.0/en/ ... estampdiff ) komme ich aber irgendwie nicht klar mit der Abfrage

Meine Abfrage:
Code: Select all
       $sql = "SELECT *
      FROM  `link_banners`
      WHERE code='$code' AND `date_expires` = 'TIMESTAMPDIFF(MINUTE,`date_expires`,now())'";


Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Re: Timestampdiff(???)

Postby Nobbie » 01. January 2009 16:30

>`date_expires` = 'TIMESTAMPDIFF(MINUTE,`date_expires`,now())'

Was ist das denn? Du suchst die Zeile, in welchem in der Spalte `date_expires` der String(!) 'TIMESTAMPDIFF(MINUTE,`date_expires`,now())' steht - dabei steht doch ein DATE_TIME Wert in `date_expires`.

Also, die Singlequotes sind totaler Quatsch (mit Verlaub) - und selbst wenn man sie weg macht, ist die Abfrage sinnfrei. TIMESTAMPDIFF gibt (in dieser Syntax) eine gewisse Anzahl an Minuten zurück. In `date_expires` steht aber keine Zahl (Anzahl Minuten), sondern nach wie vor ein DATE_TIME wert. So wie es dort steht, suchst Du die Zeilen, wo in `date_expires` ein Datum drinne steht, welches in Minuten ausgedrückt die Differenz zum jetzigen Datum sich selbst als Wert hat. Hä?
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Timestampdiff(???)

Postby juergen&lx » 01. January 2009 16:58

Nobbie wrote:>`date_expires` = 'TIMESTAMPDIFF(MINUTE,`date_expires`,now())'

Was ist das denn? Du suchst die Zeile, in welchem in der Spalte `date_expires` der String(!) 'TIMESTAMPDIFF(MINUTE,`date_expires`,now())' steht - dabei steht doch ein DATE_TIME Wert in `date_expires`.

Also, die Singlequotes sind totaler Quatsch (mit Verlaub) - und selbst wenn man sie weg macht, ist die Abfrage sinnfrei.
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '( MINUTE, `date_expires` , now( ) ) LIMIT 0, 30' at line 3
Soviel zu Singlequotes.

Das diese Abfrage irgenwo tlw. Müll ist, ist mir klar, zumindest selektiert sie die entsprechenden Rows.
Die Einschränkung "WHERE code='$code' AND ..." begrenzt die Suche auf einen bestimmten Datensatz.
Ziel dieser Abfrage: um wieviel Minuten ist die Zeit von Now() über- || unterschritten.
Das Ergebnis ist entweder positiv || 0 || negativ.
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Re: Timestampdiff(???)

Postby Nobbie » 01. January 2009 19:13

>Soviel zu Singlequotes.

Was "soviel zu den Singlequotes"? Sie sind falsch. Aber welche (ebenso falsche) Abfrage jetzt abbricht, sehe ich ja nicht.

>Ziel dieser Abfrage: um wieviel Minuten ist die Zeit von Now() über- || unterschritten.

Bahnof? Meinst Du ggf. "um wieviele Minuten weicht die Angabe in date_expires vom aktuellen Wert (= Now()) ab?". Darunter könnte ich mir zumindest etwas vorstellen.

Nur: was hat so eine Wertermittlung in einer WHERE-Klausen zu suchen? WHERE-Klauseln bestimmen den Wahrheitsgehalt von Aussagen und Bedingungen - und sind NICHT dazu da, lediglich irgendwelche Differenzen zu berechnen (d.h. man kann sie dort berechnen, aber für eine gültige WHERE Klausel muss man den berechneten Wert mit irgendetwas vergleichen).

Wenn Du nur die Differenz aus date_expires und NOW() ermitteln (und anzeigen?) willst, gehört diese Berechnung in den SELECT-Teil, nicht in den WHERE-Teil.

Nur als Beispiel (und gewöhne Dir damit direkt das gruselige "SELECT *" ab - das ist ganz schlechter Stil, dort zählt man gezielt die Werte auf, die man sehen will):

Code: Select all
      $sql = "SELECT `feld1`, `feld2`, `feld3`, TIMESTAMPDIFF(MINUTE, `date_expires`, NOW()) AS `differenz`
      FROM  `link_banners`
      WHERE `code` = '$code'";
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Timestampdiff(???)

Postby juergen&lx » 01. January 2009 20:19

:evil: ist wohl ein Versionsproblem.

Beim Provider läuft MySql5.0.45 und bei mir 5.0.51, wo "Timestampdiff einwandfrei funktioniert.
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Re: Timestampdiff(???)

Postby Nobbie » 01. January 2009 23:00

Was ja kein Beinbruch ist, die Differenz zweier Datumsangaben kann man auch mit anderen Funktionen ausrechnen.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 19 guests