Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询以列出表中出现了多少个字符串?_Php_Mysql - Fatal编程技术网

Php 查询以列出表中出现了多少个字符串?

Php 查询以列出表中出现了多少个字符串?,php,mysql,Php,Mysql,我有一个字符串数组和一个文本类型为column的表。我想列出表中任何行的指定列中出现了多少个字符串。有没有一种方法可以通过一个查询来实现这一点 Example; $strings = array('test', 'sth'); Table; id | someTextColumn ------------------- 1 | abc tests 2 | sthab 3 | teststh 4 | abcd 5 | sth Expected result; str | occur

我有一个字符串数组和一个文本类型为column的表。我想列出表中任何行的指定列中出现了多少个字符串。有没有一种方法可以通过一个查询来实现这一点

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

如果表大小不太大且列已正确索引:

SELECT 'test', COUNT(id)
FROM tableName
WHERE someTextColumn LIKE '%test%'
UNION ALL
SELECT 'sth', COUNT(id)
FROM tableName
WHERE someTextColumn LIKE '%sth%'
$query=“从tableName where中选择someTextColumn,count(id)”
对于($i=0;$i

试试这个,我希望这能解决你的问题

您可以使用一系列类似于
语句来实现这一点

以下是一个例子:

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

如果您的桌子很大,这不会特别快。如果您有较大的表,您可能需要考虑全文索引。

表大约有100行,但字符串可能比这多很多。这是一个每周工作一次的查询。如果没有更好的方法,我可以用这个。我需要知道哪个字符串出现了多少次,同一个单元格中可能有两个字符串,所以这对我不起作用。好的。现在我对你的问题有了更好的理解,我将尝试更正另一个关于该要求的查询。你尝试过这个查询吗?它给出了一个数组字符串在你的表中绝对出现的次数。我需要它们分开。看看我的预期结果。代码中的加号应该是点,$value应该是$Strings[$i],并且查询中有一个拼写错误的“from”关键字。对于不太懂php的人来说,这些可能会让人困惑,所以请编辑。除了零发生之外,这是有效的。还有什么方法可以添加它吗?@m_poorUser。是的,您需要一个外部联接(这还需要将
count(*)
更改为
count(id)
count(totest.id)
应该是
count(t.id)
。它可以工作,谢谢。
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