Boolescher Ausdruck in der by by-Klausel verwenden

8

Ich habe eine order by-Klausel, die wie folgt aussieht:

%Vor%

Wo? wird durch die ID des aktuellen Benutzers ersetzt.

Bei postgresql gibt mir das die Reihenfolge an, die ich suche, d. h. vom aktuellen Benutzer, dann höchste Bewertung, dann Titel (alphabetisch).

Aber auf MySQL bekomme ich eine unklare Reihenfolge, der aktuelle Benutzer ist weder der erste noch der letzte, noch ist es nach Bewertung oder Titel.

Ist meine einzige Option für Cross-Datenbank-Kompatibilität, diesen schnellen und schmutzigen booleschen Ausdruck durch eine CASE WHEN .. THEN .. ELSE .. END-Anweisung zu ersetzen?

Edit: Danke allen für die Hilfe, es wird von Chaos und Chad Birch richtigerweise darauf hingewiesen, dass das Problem woanders liegt (speziell dass ich die Ergebnisse der obigen Abfrage als Eingabe in die nächste verwende - dann agierend überrascht, dass die Reihenfolge der ersten verloren geht;)

    
waldo 26.02.2009, 17:39
quelle

3 Antworten

1

Ich habe verschiedene Variationen in mysql getestet und sie haben alle richtig funktioniert (so wie du es erwartest). Ich nehme an, dass Ihr Problem irgendwo anders als die Abfrage sein muss. Um dies selbst zu überprüfen, empfehle ich, eine äquivalente Abfrage direkt von mysql client auszuführen.

    
chaos 26.02.2009, 17:56
quelle
10

MySQL hat keine echte Vorstellung von booleschen Werten und bildet einfach TRUE und FALSE auf die numerischen Werte 1 bzw. 0 ab.

In diesem Fall gibt user_id <> ? für die meisten Zeilen in der Tabelle 0 und für die anderen Zeilen 1 zurück. Die Standardsortierreihenfolge ist ASC , was bedeutet, dass sich die gewünschten Zeilen höchstwahrscheinlich auf der unteren der Ergebnismenge befinden ( 0/FALSE komm vor 1/TRUE ). Versuchen Sie, Ihre Abfrage zu ändern, um dies zu berücksichtigen.

%Vor%

Unter der Annahme, dass dies tatsächlich der Fall ist, kann die datenbankübergreifende Kompatibilität problemlos erreicht werden.

%Vor%     
Alex Barrett 26.02.2009 22:41
quelle
3

Sie könnten versuchen, ein

zu tun %Vor%

, um zu sehen, dass die richtigen wahren / falschen Werte angezeigt werden.

    
Ed Greaves 26.02.2009 18:24
quelle

Tags und Links