Webboard

Pełna wersja: Zapytanie sortujące
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Mam delikatny problem z zapytaniem do bazy, mam tablicę wartości - np 2,3,7,8. 
W zapytaniu typu select chce wyrenderować całą tablicę sortując po id, ale tak aby id 2,3,7,8 były na przedzie. 

Teoretycznie mogę to zrobić w ten sposób: 
Kod PHP:
SELECT namecompanycid FROM something WHERE 1=1 ORDER BY cid='3' DESCcid='6' DESCcid DESC

W ten sposób wywali mi najpierw firmę 3, potem firmę 6, a potem już normalnie pozostałe firmy w kolejności spadkowej po cid.
Problem w tym, że wydaje mi się to trochę lamerskim rozwiązaniem w momencie gdy więcej firm na być wyświetlonych na przedzie, a dodatkowo mam problem z wspomnianą tablicą. 
Zapytanie idzie przez php i chcę określić sortowanie za pomocą zmiennej. Skoro tablica zawiera np. trzy elementy: 3 , 6 , 8 to mógłbym użyć funkcji implode() aby zamienić je na stringa i wrzucić w zapytanie. 
Kod PHP:
SELECT namecompanycid FROM something WHERE 1=1 ORDER BY cid='$sortuj' DESCcid DESC

Idąc wersja 'lamerską' próbowałem na chama: 

Kod PHP:
$tablica2 implode("cid="$sortuj); 

Ale jak nie trudno się domyślić, to tak pięknie nie działa bo to zwróci coś w stylu 5cid=7cid=8cid=9. 


tl;dr;
jak elementy z tablicy wyświetlić w zapytaniu sql na początku, a potem już dalej puścić sortowanie normalnie. 
Nie wiem do konca o co ci chodzi. Jezeli o to co mysle to zamiast DESC wystarczy uzyc ASC
Chodzi o to by wyniki posortować według asc lub desc, ale na samym przedzie listy były jakieś wyjątki, np. 3,6.

Obrazowo - z listy 10,9,8,7,6,5,4,3,2,1 zrobić 4,7,5,10,9,8,6,3,2,1
W sumie mam pewien pomysł na workaround'a, ale mało eleganckie rozwiązanie będzie
ORDER BY FIELD(id, [ids in
order])


ORDER
BY provider.package_id DESC
, FIELD
(zip,91709,92886,92807,...,91356)


ORDER BY FIELD
(user_id,5,3,2,...,50) LIMIT 10
Żadne z powyższych nie działa prawidłowo. W każdym jest założenie, że znam wszystkie id, a to nie prawda - znam tylko ID które mają być na przedzie, reszta jest dynamiczna. Chyba, że czegoś nie zrozumiałem.
ORDER BY FIELD
(user_id,5,3,2,...,50), FIELD DESC

pisze z tel