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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 使用库存控制的Mysql查询_Php_Mysql_Yii - Fatal编程技术网

Php 使用库存控制的Mysql查询

Php 使用库存控制的Mysql查询,php,mysql,yii,Php,Mysql,Yii,首先,抱歉,标题并不是最具描述性的。 我正在使用YII,试图创建一个股票系统,并在cgridview中显示它。但这不是重要的部分。使用两个mysql表products和stock,我试图根据stock表对每个产品进行计数。这是我的桌子 产品表 库存表 使用下面的MySQL,我得到了期望的结果 SELECT p.name, COUNT(s.id) as product_count FROM products AS p LEFT JOIN stock AS s ON s.product_id =

首先,抱歉,标题并不是最具描述性的。 我正在使用YII,试图创建一个股票系统,并在cgridview中显示它。但这不是重要的部分。使用两个mysql表products和stock,我试图根据stock表对每个产品进行计数。这是我的桌子

产品表

库存表

使用下面的MySQL,我得到了期望的结果

SELECT p.name, COUNT(s.id) as product_count
FROM products AS p
LEFT JOIN stock AS s ON s.product_id = p.id
WHERE p.stock_method = 1
GROUP BY p.name
请查看结果,因为我们可以看到没有库存的产品为0,有库存的产品为8

问题是stock表表示多个stock位置,因此我还需要添加一个WHERE子句,以便只查找stock\u area\u id=1,一旦这样做,我只会得到一个计数为8的单行。 如果有人能提出需要做什么的建议,我将不胜感激

作为旁注,我有两种产品类型,一种是糖果,我们买了100个,当我们出售它们时并不在意,数量只是减少了一个ie stock_方法2和我目前正在处理的一个,我们买了100部手机,每一部都是单独储存的,因为我们需要知道谁会得到这部手机,这些是基于序列的单独库存,并且是库存方法1,即数量始终为1,因此需要对其进行汇总。

我认为使用have比使用WHERE while GROUP BY更好

请尝试此查询

SELECT p.name, COUNT(s.id) as product_count
FROM products AS p
LEFT JOIN stock AS s ON s.product_id = p.id
GROUP BY p.name
HAVING p.stock_method = 1 AND stock_area_id = 1

不幸的是,我从来没有找到解决这个问题的办法。我最终通过改变数据库设计得到了我所需要的,因为当前的设计使很多事情变得困难

你知道HAVING做了什么吗?使用HAVING而不是WHERE..这是正确的方法吗?这似乎导致了一行显示的问题。问题是stock表表示多个库存位置,是否要将搜索限制在该位置?!是的,我只想要库存区域id为1的库存