我有2张桌子,购物车和产品。用户可以从产品表中选择产品,然后将其详细信息添加到购物车表中。我想要一个列表,它结合了这两个表的值并给出了结果
prodsize
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 :(得分:1)
我对你的两个条件有点困惑("有序"项目不应该显示,并且数量应为0)。如果他们的数量为0,则需要显示,对吧?无论如何,这是我的解决方案,考虑到你可能想要做后者(得到"有序"查询结果中的项目数量为0)
( m 0 0 m - 2*i - 1)
( 0 n 0 n - 2*j - 1)
( 0 0 1 0 )
( 0 0 0 1 )
和productid
也清除了其他一些东西(例如引用的索引,这会损害性能):
status
答案 1 :(得分:0)
你已经有了where子句。尝试添加
AND status = 'add_to_cart'
在现有的where子句之后。
答案 2 :(得分:0)
将c.quantity
更改为:
case c.status
when 'add_to_cart' then c.quantity
else 0
end
由于您使用了左连接,因此当该产品没有出现在用户购物车中时,零结果也将适用。
请注意userid
上的排序可能会有效地订购购物车和非购物车产品,但这是表达该意图的错误方式。最好在任何地方聚合非群组列。