我有 2 个表、购物车和产品。用户可以从产品表中选择产品,然后将其详细信息添加到购物车表中。我想要一个结合了这两个表的值并给出结果的列表
产品尺寸
id catid catname productid prodsize cost prodname
1 2 CN1 13 small 130 P1
2 2 CN1 13 large 200 P1
3 2 CN1 14 small 50 P2
4 2 CN1 14 medium 90 P2
5 2 CN1 14 large 110 P2
6 2 CN1 12 small 70 P3
7 2 CN1 12 medium 110 P3
8 2 CN1 13 medium 200 P1
购物车
id catid catname userid productid prodname prodsize prodcost quantity status
1 2 CN1 1 13 P1 small 130 2 add_to_cart
1 2 CN1 1 13 P1 large 200 2 order_placed
当我从两个表运行以下查询组合值时,但在这里我希望只显示那些状态为 add_to_cart 的产品数量,如果状态为 order_placed 那么数量应该为 0,请问任何人都可以告诉我如何我修改下面的代码以获得想要的结果
$sql= "SELECT p.catid, p.catname, p.productid, p.prodimg, GROUP_CONCAT(p.prodsize ORDER BY p.id ASC) as size, GROUP_CONCAT(p.cost ORDER BY p.id ASC) as cost, p.prodname,
GROUP_CONCAT(c.prodsize,'-',c.quantity) as cart_details, GROUP_CONCAT(DISTINCT(c.userid)) as user_id
FROM productsize p
LEFT JOIN cart c ON(c.productid = p.productid AND c.userid = '$userid' AND p.prodsize = c.prodsize)
WHERE p.catid ='$catid'
GROUP BY p.productid
ORDER BY user_id DESC, p.productid ASC";
最佳答案
我对你的两个条件有点困惑(不应显示“已订购”商品,数量应为 0)。如果它们的数量为 0,则需要显示它们,对吗?无论如何,这是我的解决方案,考虑到您可能想要执行后者(在查询结果中获取数量为 0 的“已订购”商品)
- 您需要按
productid
和status
分组 - 您需要一个数量作为将状态考虑在内的汇总 SUM
还清理了一些其他东西(例如引用索引,这会损害性能):
$sql = "SELECT p.catid, p.catname, p.productid, p.prodimg,
GROUP_CONCAT(p.prodsize ORDER BY p.id ASC) as size,
GROUP_CONCAT(p.cost ORDER BY p.id ASC) as cost, p.prodname,
GROUP_CONCAT(c.prodsize,'-',c.quantity) as cart_details,
GROUP_CONCAT(DISTINCT(c.userid)) as user_id,
SUM(CASE WHEN c.status = 'add_to_cart' THEN quantity ELSE 0 END) AS quantity
FROM productsize p
LEFT JOIN cart c ON(c.productid = p.productid
AND p.prodsize = c.prodsize)
AND c.userid = {$userid}
WHERE p.catid = {$catid}
GROUP BY p.productid, c.status
ORDER BY p.productid ASC";
关于mysql - 连接 2 个表的值并显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186597/