MySQL – ORDER BY Werte innerhalb von IN ()

Ich hoffe, die in der folgenden Abfrage zurückgegebenen Elemente nach der Reihenfolge zu sortieren, in der sie in die IN () – function eingegeben werden .

EINGANG:

SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C'); 

AUSGABE:

 | id | name | ^--------^---------^ | 5 | B | | 6 | B | | 1 | D | | 15 | E | | 17 | E | | 9 | C | | 18 | C | 

Irgendwelche Ideen?

     SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C') ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C') 

    Die FIELD- function gibt die Position der ersten Zeichenfolge in der verbleibenden Liste der Zeichenfolgen zurück.

    Es ist jedoch viel leistungsstärker, eine indizierte Spalte zu haben, die Ihre Sortierreihenfolge darstellt, und dann nach dieser Spalte zu sortieren.

    Eine andere Option von hier: http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html

     select * from tablename order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC; 

    Also in deinem Fall (ungetestet) wäre

     SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C') ORDER BY name = 'B', name = 'A', name = 'D', name = 'E', name = 'C'; 

    Je nachdem, was du tust, habe ich es ein wenig skurril gefunden, aber es hat immer funktioniert, nachdem ich ein bisschen damit gespielt habe.

    Versuchen Sie etwas wie

     ... ORDER BY (CASE NAME WHEN 'B' THEN 0 WHEN 'A' THEN 1 WHEN ... 

    Möglicherweise kann dies jemandem helfen (p_CustomerId wird in SP übergeben):

     SELECT CompanyAccountId, CompanyName FROM account LEFT JOIN customer where CompanyAccountId = customer.AccountId GROUP BY CompanyAccountId ORDER BY CASE WHEN CompanyAccountId IN (SELECT AccountId FROM customer WHERE customerid= p_CustomerId) THEN 0 ELSE 1 END, CompanyName; 

    Beschreibung: Ich möchte die Kontoliste anzeigen. Hier gebe ich eine Kundennummer in sp. Jetzt werden die Kontonamen mit Konten angezeigt, die mit diesen Kunden verknüpft sind. Oben werden die Konten angezeigt, gefolgt von anderen Konten in alphabetischer Reihenfolge.

    Sie benötigen eine andere Spalte (numerisch) in Ihrer Tabelle, in der Sie die Sortierreihenfolge angeben. Die IN-Klausel funktioniert nicht so.

     B - 1 A - 2 D - 3 E - 4 C - 5 

    benutz einfach

     order by INSTR( ',B,C,D,A,' , concat(',' , `field`, ',' ) ) 

    vermeide die Situation wie

      INSTR('1,2,3,11' ,`field`) 

    endet mit ungeordneter Ergebniszeile: 1 und 11 Alternant