2017-10-27 1 views
-2

Ich habe eine benutzerdefinierte ORDER BY Klausel für eine Abfrage, dass der Veranstaltungskalender mit dem Filter posts_where eingerichtet. Es sieht so aus:MySQL-Abfrage erzeugt unterschiedliche Ergebnisse auf verschiedenen Servern

Die Dinge schienen gut, aber der Kunde fügte ein paar Ereignisse, die es geschafft haben, dies durcheinander bringen. Nachdem der Client diese Ereignisse hinzugefügt hat, habe ich eine Kopie der Datenbank gezogen, so dass meine lokale Datenbank mit der Bereitstellung auf exakt übereinstimmt.

Auf meiner lokalen Umgebung, hier ist das Ergebnis:

enter image description here

So Ereignisse, die heute, und dann alle anderen anstehenden Ereignissen in der Reihenfolge des Datums (beginnend mit einem Ereignis, das im August begann, begann dieser Fall). Am Ende dieser Liste befindet sich ein mehrtägiges Ereignis, das gestern begonnen hat und bis November dauert, und es ist das letzte Ereignis auf der Website. Du wirst es im nächsten Screenshot sehen.

Hier ist, was die Staging-Umgebung zeigt:

enter image description here

Der Artikel aus dem unteren Teil der Liste ist nun an der Spitze (unerwünschten).

Warum erhalte ich unterschiedliche Ergebnisse zwischen den beiden Maschinen auf dem gleichen Code-Set und der gleichen Datenbank?

Lokale PHP: 7.1.0 Local MySQL: 5.7.16

Staging PHP: 7.0.2 Staging MySQL: 5.7.18

Wenn ich date_default_timezone_get() auf sie werfen, sie zeigen beide Ebene 'ol UTC.

Irgendeine Idee, warum ich unterschiedliche Ergebnisse zwischen den beiden bekomme?

EDIT: Das Server-Management-Team des Clients hat mir gesagt, dass der Staging-Server selbst in Ost-Zeit sein kann, trotz PHP ausspucken UTC. Wenn die PHP-Variablen, die in die Abfrage eingehen, und der Inhalt der Datenbank zwischen den beiden Umgebungen identisch sind, wäre das von Bedeutung?

+1

Möchten Sie nicht einfach eine (konsistent) funktionierende Abfrage haben? – Strawberry

+0

Ich habe nicht viel Erfahrung mit MySQL usw. aber es scheint, dass Ihre Testveranstaltung eine gewisse Zeit damit hat, aber die anderen nicht? Auch nicht sicher, warum Sie Ereignisse nicht einfach nach Anfangsdatum bestellen können? – mechalynx

+1

Sicher funktioniert das gut und Ihr Staging-Bereich hat nur ein Test-Event namens "Mehrtage-Test-Event" hinzugefügt, und Ihre Live-Version nicht. –

Antwort

0

Dank @Shadow für die richtige Richtung. MySQL Zeitzone war in der Tat America\New York es scheint, und wurde einige Umwandlungen auf FROM_UNIXTIME ausgeführt wird, während dev Ebene ‚ol UTC ist

Dies ist noch komplizierter, dass Wordpress Sie eine Zeitzone im Admin einstellen können, aber nicht zwingen, dass bei Die PHP-Ebene und weiter unter der Annahme von UTC, also müssen Sie die Zeitzone einstellen und dann zurücksetzen, wenn die Admin-Einstellung wichtig ist.

Verwandte Themen