2011-11-17 44 views
5

我的表有兩列,我需要排序:mysql命令由兩列和順序結果再次

content title 

只有一些行在content列數據,但都存在一定的title列。我需要對這些行進行排序,以便content列中的數據位於第一位。我能做到這一點的:

ORDER BY content DESC, title ASC 

然而,那些頂級行返回,因爲他們content列也需要通過自己的title字母順序排序(而不是由他們的內容,我認爲正在發生的事情)。

想法?謝謝。

更新:

應該注意到,title是VARCHAR和content是文本。所以任意的文字。如果沒有內容,則爲content列爲空,不爲NULL。

因此,例如:

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

的順序應該是:

title c 
title b 
title a 
title d 
+0

沒有「數據」的行包含什麼?空值 ? – ManseUK

+0

你會看到**標題**列按字母順序排序,如果只有**內容**列作爲相同的數據。如果沒有,首選的內容會轉到**內容**列 –

+1

您可以舉一個數據的例子,然後以您想要的順序對它進行排序......導致IM困惑! – ManseUK

回答

6

如果我知道你需要什麼,試試這個:

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

這解決了它,我只是略微修改IS NULL到=''並刪除額外的內容字段。謝謝 – Ashley

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

也許

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

所以總是在標題順序,但那些與內容是第一次(當標題是一樣的)

0

如何檢查是否content字段爲空第一?

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

這將首先放入非空內容行。這一切都取決於你想要達到的目標。

編輯:如果合適,則用content = ''替換爲content IS null