MYSQL LIKE语句未产生期望的结果

时间:2018-06-20 10:20:41

标签: php mysql

我有一个MySQL表

id | vegetable
---+---------------------------------
 1 | Capsicum
 2 | Capsicum, Capsicum (yellow)
 3 | Tomato, Capsicum (red)
 4 | Capsicum
 5 | Capsicum, Potato, Capsicum (red)

我想知道所有蔬菜种类的数量;辣椒必须与辣椒(红色)或辣椒(黄色)分开计算。我希望得到这样的结果:

Capsicum : 4
Capsicum (red): 2
Capsicum (yellow) : 1
Tomato : 1
Potato : 1

单个蔬菜是通过带有foreach循环的数组运行的。如果我运行以下MySQL代码:

$sql = "SELECT COUNT(vegetable) AS tot FROM mytable WHERE vegetable like '%" . $veg . "%'";

这是结果:

Capsicum : 7 // instead of 4
Capsicum (yellow) : 1
Capsicum (red) : 2
Tomato : 1
Potato : 1

此问题的解决方法是什么?

3 个答案:

答案 0 :(得分:1)

如果您要对包含“辣椒”一词的行进行计数,则应使用count(id)。

如果您的目的是计算该单词('Capsicum')在所有行中重复的次数,那么我建议您按以下方式替换它:

select (
        Length(vegetable) - 
        Length(replace(vegetable, 'Capsicum', ''))
       ) /
        Length('Capsicum')

长度(蔬菜)...这将为您提供整列的长度,假设是20 Length(replace(vegetable,'Capsicum',``)))...这将在删除单词'Capsicum'后给您长度,假设为4

差异是20-4 = 16 这意味着“辣椒”一词出现了2次

要知道单词重复了多少次,我们将结果(16)除以'辣椒'的长度 16/8 = 2次出现

现在,让我们总结所有出现的情况

select SUM
(
       (
        Length(vegetable) - 
        Length(replace(vegetable, 'Capsicum', ''))
       ) /
        Length('Capsicum')
)

答案 1 :(得分:0)

它确实能按预期运行,因为它找到了7条记录。您的专栏很可能是可枚举的?

我的建议是对数据库sceham(1个带蔬菜的表),1个具有可能的颜色的表和1个将蔬菜与颜色结合在一起的表(因为我看到您在注释中写颜色)进行规范化,并查询最后一个我写的表格。

您也可以在查询中尝试使用"group by (vegetable)",它可以为您提供近似的搜索结果,但是我不确定。

$sql = "SELECT COUNT(vegetable) AS tot 
        FROM mytable 
        WHERE vegetable like '%" . $veg . "%' 
        GROUP BY (vegetable)";

答案 2 :(得分:0)

可能是DISTINCT关键字可以使用。