2017-08-27 6 views
0

Ich habe eine Abfrage wie diese Abfrage unten.MySQL Eine Ausnahme zu einer Bestellung machen?

Sagen wir, ich habe einen Benutzer namens "John Smith". Ich möchte, dass die Abfrage so arbeitet wie sie ist, außer dass alle Einträge von John Smith die Reihenfolge verletzen und am Anfang der Liste erscheinen sollen.

Ich habe mich nur gefragt, ob es einen einfacheren oder geeigneteren Weg gibt, dies zu tun als ein JOIN (wie unten).

Auch, wenn es darauf ankommt, kann "John Smith" Einträge zu einem bestimmten Zeitpunkt haben oder nicht.

Danke!

Like:

SELECT name, id, note_date, note 
FROM example 
WHERE name = "John Smith" 
ORDER BY note_date 
JOIN 
SELECT name, id, note_date, note 
FROM example 
WHERE name != "John Smith" 
ORDER BY name, note_date 
+0

Warum hier mit JOIN? UNION scheint angemessener zu sein. – Mikhail

Antwort

2
SELECT name, 
      id, 
      note_date, 
      note, 
      CASE 
       WHEN name= 'John Smith' 
        THEN 0 
       ELSE 1 
       END AS OrderStatement 
FROM example 
ORDER BY OrderStatement, name, note_date 

Nur müssen Sie eine weitere Spalte erstellen kundenspezifischen Auftrag zu generieren und in der ORDER BY-Klausel zu verwenden, zusammen mit den anderen Spalten.

+0

Das funktioniert super. Ich schätze es sehr und all die anderen Beispiele hier. Danke an alle. – Reno

0

Sie

Fall verwenden können, wenn dann

Solche uns

select id, etc, etc 
    case users.name 
     when ‘John Smith’ then ORDER BY etc 
     when 'X' then ORDER BY etc 
    end 
from`users` 

Achten Sie auf die vorgoles, diese nicht richtig sind, aber ich bin auf meinem Handy und Es gibt nicht die richtigen

0

Eine Möglichkeit, dies zu tun, ist UNION:

(SELECT name, id, note_date, note 
FROM example 
WHERE name = "John Smith" 
ORDER BY note_date) 
UNION 
(SELECT name, id, note_date, note 
FROM example 
WHERE name != "John Smith" 
ORDER BY name, note_date) 

Eine weitere, prägnante Weise ist CASE Operator zu verwenden:

SELECT name, id, note_date, note, CASE WHEN name='John Smith' THEN 1 ELSE 2 END as rank 
FROM example 
ORDER BY rank, name, note_date