2013-05-26 39 views
5

我有一個字符串數組和一個帶有文本類型列的表格。我想列出哪個字符串在表中任何一行的指定列中出現了多少次。有一種方法可以用一個查詢來做到這一點嗎?查詢列出哪個字符串在表中出現了多少個字符?

Example; 
$strings = array('test', 'sth'); 

Table; 
id | someTextColumn 
------------------- 
1 | abc tests 
2 | sthab 
3 | teststh 
4 | abcd 
5 | sth 

Expected result; 
str | occurences 
----------------- 
test | 2 
sth | 3 

回答

0

您可以使用一系列like語句來執行此操作。

下面是一個例子:

select totest.str, count(t.id) 
from (select 'test' as str union all 
     select 'sth' 
    ) totest left outer join 
    t 
    on t.someTextColumn like concat('%', totest.str, '%') 
group by totest.str 

這不會是特別快,如果你的表是大。如果您的表格較大,則可能需要考慮全文索引。

+0

這是工作,除零發生。有沒有辦法添加它? –

+0

@m_poorUser。 。 。是的,你需要一個外連接(這也需要將'count(*)'改爲'count(id)'。 –

+0

'count(totest.id)'應該是'count(t.id)'。作品,謝謝。 –

0

如果表規模並不太大,列被正確索引:

SELECT 'test', COUNT(id) 
FROM tableName 
WHERE someTextColumn LIKE '%test%' 
UNION ALL 
SELECT 'sth', COUNT(id) 
FROM tableName 
WHERE someTextColumn LIKE '%sth%' 
+0

表格大約有100行,但字符串可能比這個數量多得多。這是一個查詢將每週工作一次。所以如果沒有更好的方法去做,我可以使用它。 –

0
$query = "select someTextColumn, count(id) from tableName where " 
for($i=0; $i < count($Strings); $i++) 
{ 
    if($i != 0) 
    $query .= " OR "; 
    $query .= "someTextColumn =" . $string[$i]; 
} 
$query .= " group by someTextColumn"; 

$result = mysql_query($query); 

試試這個,我希望這將解決問題的回合!

+0

我需要知道哪個字符串發生了多少次,並且在同一個單元格中可以有兩個字符串,所以這對我不起作用。 –

+0

好的。現在我對自己的問題有了更好的理解,我將嘗試針對該要求進行另一個查詢。 –

+0

你試過這個查詢嗎?它是在你的表中給出一個數組字符串絕對出現次數。 –

相關問題