表中的常用字数,而不仅仅是一行

时间:2014-03-14 09:08:26

标签: php mysql sql

我知道我可以计算一个字符串中常见的单词,但是多重字符串的最佳解决方案是什么?或者在这种情况下,表中的行?

示例表:

ID    Title
------------
1     red car
2     blue car
3     red bike
4     green car
5     red and green car

我想从列中返回前三个常用词及其计数:title eg。

Word    Count
--------------
car     4
red     3
green   2

我正在使用mysql& PHP

有一种有效的方法吗?

2 个答案:

答案 0 :(得分:2)

可以使用MySQL string manipulation methods来完成。使用这些,您可以创建一个查询,让您获得所有"单词"从你的表行。 但是,在MySQL中拆分字符串并不是一个小问题。遗憾的是,MySQL没有拆分或爆炸方法。 阅读它here

如果您将该查询用作子查询,则可以使用order by和MySQL的字符串长度方法来获取单词的有序列表及其出现。

您可以选择迭代所有MySQL结果,使用您找到的单词填充本地PHP数组并保持计数。请参见此示例:

<?php
// connect to db and so fort
...
$wordCounterArray = array();
while(($row = mysqlfetch_assoc($mysqlHandle) !== false ) {
  $words = explode(' ',$row['Title']);
  foreach ($words as $word) {
    if(array_key_exists($word, $wordCounterArray ) {
      $wordCounterArray[$word]++;
    }
    else {
      $wordCounterArray[$word] = 1;
    }
  }
} 

现在你仍然需要按照它的值排序那个数组,但我想你会弄清楚如何用google和php在线文档做到这一点吗?

答案 1 :(得分:0)

用它来获取记录:

SELECT group_concat(concat(`Title`) separator ' ')
FROM test

请参阅demo

将其值存储到 $ text ,然后使用,

echo substr_count($text, 'car');
echo substr_count($text, 'red');

有关 substr_count()的更多详情,请参阅demo