【问题标题】:Sort by the number of words in a MySQL field按 MySQL 字段中的单词数排序
【发布时间】:2012-10-24 06:12:18
【问题描述】:

我想按指定列中的字数对 MySQL 查询的结果进行排序。

类似这样的:

SELECT bar FROM foo ORDER BY WordCountFunction(bar)

有可能吗?

【问题讨论】:

  • 检查 mysql LENGTH() ! stackoverflow.com/questions/1870937/…
  • 这些文字是用什么语言写的?
  • @Vucko 正确的拼写是LENGTH。而且这个函数不会返回文本中的单词数。
  • 谢谢,不知何故我错过了。但是 LEN() 呢? w3schools.com/sql/sql_func_len.asp
  • LEN() 只返回字段的长度,而不是其中可能包含多少单词。从记忆中,我认为它甚至在 MySQL 中也无效。

标签: mysql sql-order-by


【解决方案1】:

是的,有点。但它不会 100% 准确:

SELECT SUM(LENGTH(bar) - LENGTH(REPLACE(bar, ' ', ''))+1) as count
FROM table
ORDER BY count DESC

但这假设单词由空格' ' 分隔,并且不考虑标点符号。您总是可以用另一个字符替换它,它也不考虑双空格或其他字符。

为了完全准确,您可以随时提取结果并以您选择的语言进行字数统计 - 准确的字数统计功能确实存在!

希望这会有所帮助。

【讨论】:

  • 我同意用外部语言进行字数统计可能更容易 - 您可以使用标记器并正确修剪。替换空格似乎有点像 hack-ish 解决方案。
  • @StevenLiao 是的,用作近似值,这是一种很好的技术,但在书面文本上不是 100% 准确。如果您有许多字段要扫描并返回一个近似结果集,那就太好了。
【解决方案2】:

使用this method 计算列中的单词数,您的查询将如下所示:

SELECT bar FROM foo ORDER BY (LENGTH(bar) - LENGTH(REPLACE(bar, ' ', ''))+1) DESC

【讨论】:

    【解决方案3】:

    据我所知,MySQL 中没有字数统计功能,但是如果您的数据格式正确,您可以计算空格数并添加一个(单词的空格分隔符,条目开头/结尾没有空格) .

    这是首先列出最长单词的查询:

    SELECT bar FROM foo ORDER BY (LENGTH(bar) - LENGTH(REPLACE(bar, ' ', ''))+1) DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      相关资源
      最近更新 更多