【问题标题】:MySQL: Selecting rows ordered by word countMySQL:选择按字数排序的行
【发布时间】:2011-09-24 21:21:53
【问题描述】:

如何按字数排序我的查询?有可能吗?

我在表格中有一些行,带有文本字段。我想按这些文本字段的字数对它们进行排序。

第二个问题是,我只需要选择这些行,例如最少 10 个单词或最多 20 个单词。

【问题讨论】:

  • 所以你真的在寻找一个函数F 这样F('Where is pancakes house?') 将返回4?
  • 是的,我一直在寻找它,但正如我现在所看到的,没有好的解决方法,所以我必须为此字段添加另一个包含字数的列,然后它会很简单。

标签: mysql select sql-order-by


【解决方案1】:

可能是这样的:

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

Field2 是您要统计字数的字符串字段。

【讨论】:

  • 它可以工作 - 谢谢,但我意识到字符串操作对于数据库适配器来说会很繁重,并且在插入时计算单词会更快。
【解决方案2】:

好吧,这不会很好地执行,因为需要对 所有行执行字符串计算:

您可以像这样计算 MySQL 列中的单词数:SELECT SUM( LENGTH(name) - LENGTH(REPLACE(name, ' ', ''))+1) FROM table(前提是单词被定义为“whatever-delimited-by-a-whitespace”)

现在,将其添加到您的查询中:

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>

【讨论】:

  • 既然我询问了查询,那么您的回答是可以的。但是我当然不会使用这种方法,因为字符串计算量很大。
  • SUM 根本不应该使用。只需使用SELECT LENGTH(name) - LENGTH(REPLACE(name, ' ', ''))+1
  • 哦,好吧,我看到 OP 说“文本字段”pluarl,所以我可以看到如何需要 SUM 将所有字段字数加在一起。但上面的例子暗示了一个单一的领域,这就是我感到困惑的原因。因此,为了澄清我的上述评论,如果检查超过一列的总字数,确实需要 SUM。
猜你喜欢
  • 2010-10-20
  • 2012-02-12
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2015-01-14
相关资源
最近更新 更多