2011-11-17 15 views
5

Moja tabela ma dwie kolumny, które trzeba posortować według:MySQL zamówienie przez dwóch kolumnach i wynikach zamówień ponownie

content title 

Tylko kilka wierszy danych w kolumnie content ale wszystkie mają pewne w kolumnie title. Muszę posortować te wiersze, aby pierwsze zawierały dane w kolumnie content. Mogę to zrobić:

ORDER BY content DESC, title ASC 

te górne rzędy powrócił jednak ze względu na ich content kolumny również muszą być sortowane alfabetycznie według ich title (nie przez ich treści które zakładam się dzieje).

Pomysły? Dzięki.

Aktualizacja:

Powinienem zaznaczyć, że title jest VARCHAR i content jest TEKST. Tak arbitralny tekst. content kolumna jest pusta, jeśli nie ma zawartości, nie ma wartości NULL.

Tak na przykład:

`title`  `content` 
title a 
title b  this has content 
title c  so does this 
title d 

Kolejność będzie:

title c 
title b 
title a 
title d 
+0

Co zawierają wiersze, które nie zawierają "danych"? zero ? – ManseUK

+0

Zobaczysz ** tytuł ** kolumna posortowana alfabetycznie jeśli i tylko ** treść ** kolumna jako te same dane. Jeśli nie, to pierwszeństwo ma każda ** treść ** kolumna –

+1

Czy możesz podać przykład swoich danych, a następnie także, w jakiej kolejności chcesz je posortować ... ponieważ IM jest zdezorientowany! – ManseUK

Odpowiedz

6

Jeśli dobrze rozumiem, co trzeba, spróbuj tego:

SELECT * FROM your_table 
ORDER BY 
    CASE 
    WHEN content IS NULL THEN 1 
    ELSE 0 
    END 
    ,content,title 
+0

Rozwiązał to, po prostu zmodyfikowałem go nieznacznie zmieniając IS NULL na = '' i usunąłem dodatkowe pole zawartości. Dzięki – Ashley

1
ORDER BY (content='') DESC, title ASC 

czy może

ORDER BY title ASC,(content='') DESC 

więc zawsze w tytule porządku, ale te z zawartością są pierwsze (jeśli tytuł jest taki sam)

0

Jak o sprawdzenie czy pole content jest pusty pierwszy?

ORDER BY if(content = '', 0, 1), content, title 

Spowoduje to umieszczenie niepustych wierszy zawartości jako pierwszych. Wszystko zależy od tego, co chcesz osiągnąć.

Edytuj: zamień content = '' z content IS null, jeśli to konieczne.

Powiązane problemy