连接2个表的值并显示数据

时间:2015-10-17 12:26:27

标签: mysql sql database

我有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";

3 个答案:

答案 0 :(得分:1)

我对你的两个条件有点困惑("有序"项目不应该显示,并且数量应为0)。如果他们的数量为0,则需要显示,对吧?无论如何,这是我的解决方案,考虑到你可能想要做后者(得到"有序"查询结果中的项目数量为0)

  1. 您需要按( m 0 0 m - 2*i - 1) ( 0 n 0 n - 2*j - 1) ( 0 0 1 0 ) ( 0 0 0 1 ) productid
  2. 进行分组
  3. 您需要一个数量作为汇总SUM,将状态记入帐户
  4. 也清除了其他一些东西(例如引用的索引,这会损害性能):

    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上的排序可能会有效地订购购物车和非购物车产品,但这是表达该意图的错误方式。最好在任何地方聚合非群组列。