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

标签 mysql sql database

我有 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 的“已订购”商品)

  1. 您需要按 productidstatus 分组
  2. 您需要一个数量作为将状态考虑在内的汇总 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/

相关文章:

mySQL 存储过程 - 游标错误

javascript - 测试微服务功能时模拟数据库

mysql - 带有 SphinxSE 的 MariaDB 10.0

php - Laravel 和 phpMyAdmin - pdoexception 无法建立连接,因为目标机器主动拒绝它

mysql - SQL 连接查询中的一行

php - MySQL 头痛,我应该还是不应该?

java - 使用默认数据填充 sqlite 数据库时的最佳做法是什么?

mysql - 如何获取exists子句中的数据

mysql - 如何在 MySQL MATCH() AGAINST() 搜索中获取完全匹配的关键字?

sql - If 语句 VBA 访问的 bool 问题