Frage

Ich habe ein PHP -Array mit ID -Zahlen. Diese Zahlen sind bereits bestellt.

Jetzt möchte ich mein Ergebnis über die In () -Methode erhalten, um alle IDs zu erhalten.

Diese IDs sollten jedoch wie in der In -Methode bestellt werden.

Zum Beispiel:

IN(4,7,3,8,9)  

Sollte ein Ergebnis geben wie:

4 - Article 4  
7 - Article 7  
3 - Article 3  
8 - Article 8  
9 - Article 9

Irgendwelche Vorschläge? Vielleicht gibt es eine Funktion dazu?

Vielen Dank!

War es hilfreich?

Lösung

Ich denke, Sie suchen möglicherweise nach Funktion AUFSTELLEN - Obwohl es normalerweise als String-Funktion betrachtet wird, funktioniert es auch für Zahlen gut!

ORDER BY FIELD(field_name, 3,2,5,7,8,1)

Andere Tipps

Du könntest benutzen FIELD():

ORDER BY FIELD(id, 3,2,5,7,8,1)

Gibt den Index (Position) von STR in der Liste STR1, STR2, STR3, ... zurück. Gibt 0 zurück, wenn STR nicht gefunden wird.

Es ist jedoch eine Art hässlicher Hack, also verwenden Sie ihn wirklich nur, wenn Sie keine andere Wahl haben. Das Sortieren der Ausgabe in Ihrer App kann besser sein.

Standard SQL bietet keine Möglichkeit, dies zu tun (MySQL May, aber ich bevorzuge Lösungen, die Lieferantenneutral sind, damit ich die DBMs jederzeit wechseln kann).

Dies sollten Sie bei der Nachbearbeitung tun nach Das Ergebnissatz wird zurückgegeben. SQL kann sie nur in einer Bestellung zurückgeben irgendein Bestellen Sie, wenn es keine solche Klausel gibt).

Die andere Möglichkeit (obwohl es mir nicht gefällt, ich bin eine Ehre, um Ihnen die Wahl zu geben) besteht darin, mehrere Reisen in die Datenbank zu unternehmen, eine für jede ID, und sie zu verarbeiten, wenn sie hereinkommen:

select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.

Sie müssen nur die richtige Bestellung per Anweisung geben.

SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID

Warum möchten Sie Ihre Daten wie in Ihrem Beispiel nicht ordnungsgemäß bestellt?

Wenn es Ihnen nichts ausmacht, lange Anfragen zu verkürzen, versuchen Sie es so:

SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top