2013-05-26 41 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

你试过这个查询吗?它是在你的表中给出一个数组字符串绝对出现次数。 –

相关问题