2011-06-29 94 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