2010-08-31 134 views
-1

我有一個數據庫,我想根據包含在每個字段中的單詞數量對列進行排序。mysql排序問題

例:

a b (has 2 words) 
a b c d e (has 5 words) 
a b c (has 3 words) 

,我想 'A B C d E' 是在排序結果的第一,和 'A B C' 的第二個。 ..等

你有解決方案嗎?

編輯:感謝球員們的quicly答案! 所有答案是好的,但同時,我解決了使用這裏找到mysql-substr-count

+5

嚴重的是,溝渠該架構。如果你發現自己不得不單獨處理某個專欄中的項目,那麼你做錯了一件事。 – paxdiablo 2010-08-31 07:59:35

+0

您在鏈接中找到的解決方案已在答案中給出... – knittl 2010-08-31 08:38:21

回答

1

這應該做的伎倆,但也許有一個更好的(快)解決方案:

SELECT * 
FROM table 
ORDER BY LENGTH(column) - LENGTH(REPLACE(column, ' ', '')) 
0

相同sollutions您可以通過空格數量排序:

order by length(field) - length(replace(field, ' ', '')) desc 
1

坎 - here的,關於如何在一列數字的例子。也許它可以擴展這樣

SELECT 
    SUM(LENGTH(`name`) - LENGTH(REPLACE(`name`, ' ', ''))+1) AS `num_words` 
FROM `table` 
ORDER BY `num_words` 

(未測試 - 對不起。)

+0

這將計算所有記錄中的數字或單詞,而不是按每條記錄中的單詞數量對結果進行排序。 – Guffa 2010-08-31 08:16:46

0

你最有可能錯了你的數據庫結構。如果你問這樣一個問題。
這樣的數字應該取自數據庫結構,而不是字段內容。
由於這樣糟糕的設計的直接結果是上述答案中所有查詢的可怕表現。