2016-07-01 21 views
1
Arbeits

Ich bin bereit Anweisung aber nur für diese Frage finden Sie in der Probe unter:PHP Mysqli Equal Betreiber nicht

'SELECT agentname,agentjoindate FROM agentdatabase WHERE joindate = (NOW() - INTERVAL 11 DAY)'

den Namen auswählen und das Datum beitreten, wenn joindate genau 11 Tage vor . Ich kann nicht scheinen, Ergebnisse für die oben genannte Abfrage zu erhalten, wenn es mindestens 1 geben sollte. Wenn ich das Größer als oder weniger als es funktioniert, aber nicht, wenn ich equals zu verwende. joindate ist eine Datumsspalte in der Mysql-Datenbank. Kann ein Datumstypfeld nicht gleich (NOW() - INTERVAL 11 DAY) sein, weil es größer oder kleiner als die einzigen Operatoren ist, die funktionieren?

+0

Sie verwenden unterschiedliche Spaltennamen in der Select- und in der Where-Klausel. –

+0

Ansonsten versuchen Sie 'DATE (joindate) = DATE (NOW() - INTERVALL 11 DAY ') ansonsten müssen die Daten bis zur zweiten identisch sein. –

+0

Ja, ich musste den Agentennamen und den Agentenjoindaten auswählen, aber die Auswahl muss auf einer dritten Spalte 'joindate' basieren :) –

Antwort

0

"NOW() - INTERVAL 11 DAY" wird ein Datum im Format Datetime zurück: 2016-06-20 16:22:26

Wenn "joindate" nicht in diesem Format und stattdessen in einem Datumsformat wird nichts passen. Anschließend sollten Sie verwenden: "CURDATE() - INTERVAL 11 DAY"

Prost

+0

Jeroen erklärte es gut, aber das funktioniert und ist einfacher. Die meisten anderen Antworten haben auch funktioniert, haben sich aber nicht mit den BETWEEN Antworten beschäftigt, da das nicht mein Ziel ist. –

+0

Es gibt immer mehrere richtige Antworten auf ein Problem.Das schien die schnellste Lösung zu sein;) –

0

Verwenden Sie die DATE_SUB Funktion richtig Daten zu subtrahieren:

SELECT agentname,agentjoindate FROM agentdatabase WHERE joindate = DATE_SUB(CURDATE(), INTERVAL 11 DAY) 

I NOW() zu CURDATE() weil die ersten Erträge ein DATETIME- geändert und die zweite kehrt nur das Datum. Wenn joindate eine Datumszeit ist, dann wandle es als Datum um, indem du DATE(joindate verwendest, weil es sonst versuchen wird, die genaue Zeit zu finden.

1

, ohne die Werte zu sehen, würde ich davon ausgehen, dass Sie das Datum das Format yyyy-mm-dd folgt.

Jedoch wird NOW() - INTERVAL 11 DAY das Format yyyy-mm-dd H:m:s haben; es wird auch Zeit haben.

So auch wenn Ihr Datum auch eine Zeit haben würde, möchten Sie immer noch nicht nur auf das genaue Datum und Zeit übereinstimmen.

Sie können so leicht lösen, indem Sie das Datum aus dem letzten Wert bekommen:

... WHERE joindate = DATE(NOW() - INTERVAL 11 DAY) 
+1

Danke Jeroen, diese Erklärung hat mir geholfen, das Problem zu verstehen, aber ich werde CURDATE verwenden, da es einfacher erscheint und ich nicht mehr zu DATE() konvertieren muss –