我有一个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
此问题的解决方法是什么?
答案 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关键字可以使用。