2011-09-22 13 views
5

Powiedz, że mam tabelę mySQL, która ma pole o nazwie "nazwa"Kolejność mySQL według niektórych wartości i następnie DESC?

To pole zawiera jedną nazwę w wierszu.

Istnieje 10 rzędy:

Apple 
Pear 
Banana 
Orange 
Grapefruit 
Pineapple 
Peach 
Apricot 
Grape 
Melon 

Jak bym utworzyć kwerendę więc wybrać z tabeli, chcę szczegóły, aby pokazać jak to:

Peach 
Apple 
Apricot 
... and then everything else is listed by descending order. 

Więc zasadniczo chcę pokaż kilka określonych wyników na górze listy, a następnie resztę wyników w kolejności malejącej.

Dziękuję.

Odpowiedz

-1

Ponieważ używasz php, możesz odczytać odpowiedzi w postaci tablicy, pop elementy, które chcesz na górze przechowywać je w tymczasowej tablicy. Sortuj oryginalną tablicę alfabetycznie, a następnie wstaw tymczasową tablicę.

1

Możesz sortować za pomocą funkcji warunkowych za pomocą funkcji IF(). Dokumentacja dla IF() stanów:

IF(expr1,expr2,expr3)

Jeśli wyr1 jest TRUE (wyr1 <> 0 i wyr1 <> NULL) następnie IF() zwraca wyr2; w przeciwnym razie zwraca wyrażenie 3. IF() zwraca wartość liczbową lub łańcuchową o wartości , w zależności od kontekstu, w którym jest używana.

więc można go używać do sortowania określonych elementów na górze tak:

SELECT * 
FROM fruit 
ORDER BY 
    IF(name = 'Peach', 0, 1), 
    IF(name = 'Apple', 0, 1), 
    IF(name = 'Apricot', 0, 1), 
    name DESC 

Jest to seria zleceń, z których pierwszy biorąc najwyższym priorytecie. Więc jeśli name='Peach', wartość będzie 0, dla wszystkich innych wartość będzie 1. Ponieważ w domyślnym porządku ASC, 0 występuje przed 1, to zapewnia "Brzoskwinia" będzie na górze listy. Drugi rodzaj w serii określa, jak zerwać więzy dla pierwszego sortowania. W tym przypadku wszystkie elementy oprócz remisu "Brzoskwinia" w pierwszym sortowaniu o wartości "1". I w tym przypadku "Apple" zostaje wypchnięty na szczyt listy remisów, co w rzeczywistości jest drugim miejscem na liście. Etc ... aż do końca ostatnia nazwa DESC.

Jako druga odpowiedź wskazuje CASE() jest alternatywą dla serii IF() s:

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

Pierwsza wersja zwraca wynik wartość = compare_value. Druga wersja zwraca wynik dla pierwszego warunku, który jest prawdziwy. Jeśli nie było pasującej wartości wyniku, wynik po ELSE został zwrócony lub NULL, jeśli nie ma części ELSE.

6

Można zrobić coś takiego:

select * 
from fruit 
order by 
    case name 
     when 'Peach' then 1 
     when 'Apple' then 2 
     when 'Apricot' then 3 
     else 4 
    end, 
    name 

który powinien działać w dowolnej bazy danych SQL.

Powiązane problemy