mysql的语句不能产生预期的结果

ntjbwcob  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(608)

我有一张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

这个问题的解决方法是什么?

vi4fp9gy

vi4fp9gy1#

如果要计算包含单词“capsicum”的行数,则应使用count(id)。
如果你的目的是计算这个词(“capsicum”)在所有行中重复了多少次,那么我建议你按以下方式替换它:

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

长度(蔬菜)。。。这将给你整个列的长度,假设它是20长度(替换(蔬菜,'辣椒','')。。。如果去掉“capsicum”这个词的长度是4,那么这将给出它的长度
差别是20-4=16这意味着“辣椒”一词出现了两次
为了知道这个词被重复了多少次,让我们把结果(16)除以单词“capsicum”的长度16/8=2次
现在,让我们把所有的事件加起来

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

nbnkbykc2#

它确实像预期的那样工作,因为它发现了7条记录。你的列很可能是可枚举的?
我的建议是规范化数据库sceham(1个带蔬菜的表)、1个带可能颜色的表和1个结合蔬菜和颜色的表(因为我看到你在评论中写颜色),并查询我写的最后一个表。
你也可以试试 "group by (vegetable)" 对你的问题,它应该给你一个大概的结果,你所寻求的,但我不完全确定。

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

prdp8dxp3#

可能是不同的关键字可以工作。

相关问题