2012-11-03 123 views
0

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

事情是这样的:

SELECT bar FROM foo ORDER BY WordCountFunction(bar) 

这可能吗?

+0

检查MySQL的长度()! http://stackoverflow.com/questions/1870937/mysql-how-to-select-data-by-string-length – Vucko

+0

这些文字用什么语言书写? – Jocelyn

+1

@Vucko正确的拼写是'LENGTH'。这个函数不会返回文本中的单词数量。 – Jocelyn

回答

4

据我所知,在MySQL中没有字数统计功能,但是如果数据格式正确,你可以计算空格的数量并添加一个(空格分隔符为单词,在开始/结束时没有空格)。

下面是该查询首先列出最长的一句话:

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

+1这就是我所说的一个很好的黑客! – Nelson

1

是,排序的。它不会是100%准确,但:

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

但这是假设的话都用空格隔开' '并没有考虑标点。您可以随时用另一个字符替换它,但它不占用双空格或其他字符。

为了获得完整的准确度,您可以随时将结果和单词计数以您选择的语言 - 确实存在准确的单词计数功能!

希望这会有所帮助。

+0

我同意用外部语言进行单词计数可能更容易 - 您可以只使用标记器并正确修剪。替换空间似乎有点像黑客解决方案。 –

+0

@StevenLiao是的,用作近似值,这是一个很好的技巧,但对于书面文本却不准确100%。如果你有很多领域需要扫描并返回一个近似的结果集,那就太好了。 – nickhar

2

使用this method来算的话在一列中的数字,您的查询应该是这样的:

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