2014-03-14 27 views
1

我知道我可以統計字符串中常見的單詞,但多字符串的最佳解決方案是什麼?或者在這種情況下,表中的行?跨表格的常見字數而不只是一行

實施例的表:

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

我想回到頂部3的常用詞,並從柱的計數:例如標題

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

我用mysql & PHP

是否有一個有效的方式來做到這一點?

+2

是的。規範化你的數據 –

+0

我認爲這種規範化程度並不合適。沒有必要僅使用MySQL解決所有問題。 – Strawberry

+0

@DarrenSweeney考慮接受兩個答案之一或要求進一步的細節。這樣可以防止這個問題得到更多的關注,並且對那些花時間幫助你的人表現出至少一些讚賞。 –

回答

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; 
    } 
    } 
} 

現在你仍然有它的價值,以這個數組排序,但我猜你會弄清楚怎麼做,自己與谷歌和右側的PHP在線文檔?

0

使用該獲取的記載:

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

看到demo

店它的價值爲$文本再使用,

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

爲更詳細地介紹substr_count()demo

+0

其工作完美.. –

+1

如果結果字符串變得太長,你不會遇到問題嗎? 對MySQL中單行結果字段可以使用多長時間沒有限制嗎? –

相關問題