2016-08-09 12 views
2

Geige My SQL in irgendeiner Reihenfolge Datensatz suchen: http://sqlfiddle.com/#!9/012138/1Ich brauche nach Status-ID

Ich habe folgende Tabelle:

Produkte (Tabelle)

id INT(10) 
productname VARCHAR(50) 
statusid INT(10) 

Angenommen, wir haben die folgenden Aufzeichnungen:

id productname  statusid 
5 P1000    2 
6 P2000    1 
7 P3000    3 

Jetzt können Sie sehen, dass die Status-ID 1,2,3 ist. Ich möchte nach Status-ID, aber Status-ID, die wir speichern, ist auf andere Weise, so dass ich keine Abfrage schreiben kann, um per Statusid direkt nach Reihenfolge zu suchen. Weil ich den Datensatz gemäß der folgenden Status-ID abrufen muss:

zuerst statusid 3, dann Status-ID 1 und dann Status-ID 2. Wie ist es möglich, Abfrage zu schreiben?

+0

wie viele einzigartige statusids da? – 1000111

+0

Siehe die Funktion FIELD() – Strawberry

Antwort

3

können Sie versuchen, mit FIND_IN_SET

SELECT 
* 
FROM products 
ORDER BY FIND_IN_SET(statusid,'3,1,2') 

WORKING DEMO

Hinweis:

Ihre benutzerdefinierten Sequenz hier hinzufügen FIND_IN_SET(statusid,'3,1,2')

Kurze Anmerkung o n FIND_IN_SET:

Beschreibung

MySQL FIND_IN_SET() die Position einer Zeichenkette zurückgibt, wenn es vorhanden ist (als Teil) innerhalb einer Liste von Zeichenketten. Die String-Liste selbst ist eine Zeichenkette, die Teilstrings enthält, die durch ',' (Komma) getrennt sind.

Diese Funktion gibt 0 zurück, wenn keine Suchzeichenfolge in der Zeichenfolgenliste vorhanden ist, und gibt NULL zurück, wenn eines der Argumente NULL lautet.

Syntax

FIND_IN_SET (search string, string list) 

Argumente

Name   Description 
search string A string which is to be looked for in following list of arguments. 
string list  List of strings to be searched if they contain the search string. 

Related post

Alternativ können Sie FIELD() Funktion erreichen verwenden, dass

2

Oder verwenden FIELD:

select * 
from products 
order by field(statusid, 3, 1, 2) 

Demo Here