2011-06-29 132 views
1

如何按字數統計我的查詢?可能嗎?MySQL:選擇按字數排序的行

我在表中有一些行,有文本字段。我想通過這些文本字段的字數對它們進行排序。

第二個問題是,我只需要選擇這些行,其中有例如最少10個字,或最高20

+0

所以你真的在尋找一個函數'F',這樣'F''煎餅屋在哪兒?')'會返回4嗎? –

+0

是的,我正在尋找它,但正如我現在看到的,沒有好的解決方法,所以我將不得不添加另一個字段的字段,然後它會很簡單。 – Karol

回答

4

那麼,這將不執行得非常好,因爲字符串計算需要所有行執行:

你可以指望的字數在MySQL列像這樣:SELECT SUM(LENGTH(name) - LENGTH(REPLACE(name, ' ', ''))+1) FROM table(前提是詞被定義爲「無論分隔按一個空白」)

現在,這種添加到您的查詢:

SELECT 
    <fields> 
FROM 
    <table> 
WHERE 
    <condition> 
ORDER BY SUM(LENGTH(<fieldWithWords>) - LENGTH(REPLACE(<fieldWithWords>, ' ', '')) + 1) 

或者,將其添加到條件:

SELECT 
    <fields> 
FROM 
    <table> 
WHERE 
    SUM(LENGTH(<fieldWithWords>) - LENGTH(REPLACE(<fieldWithWords>, ' ', '')) + 1) BETWEEN 10 AND 20 
ORDER BY <something> 
+0

由於我詢問了有關查詢,那麼你的答案是好的。但是,我當然不會使用這種方法,因爲字符串計算繁重。 – Karol

+0

不應該使用'SUM'。只需使用'SELECT LENGTH(name) - LENGTH(REPLACE(name,'',''))+ 1' –

+0

哦,我看到OP說「文本字段」pluarl,所以我可以看到SUM需要如何添加所有一起領域字計數。但上面的例子意味着一個單一的領域,這就是爲什麼我感到困惑。因此,爲了澄清我的上述評論,如果檢查多個列的總字數,確實需要SUM。 –

2

也許是這樣的:

SELECT Field1, SUM(LENGTH(Field2) - LENGTH(REPLACE(Field2, ' ', ''))+1) 
AS cnt 
FROM tablename 
GROUP BY Field1 
ORDER BY cnt 

Field2是字符串場你想在其中計算單詞。

+0

它可以工作 - 謝謝,但我意識到,字符串操作將沉重的數據庫適配器,並更快地計算插入詞的權利。 – Karol