【问题标题】:Find all products in user cart table and check if product is in saved items table查找用户购物车表中的所有产品并检查产品是否在已保存项目表中
【发布时间】:2021-10-04 20:18:51
【问题描述】:

我正在使用 NodeJS、MySQL 和 React 在购物网站上练习我的(初学者)技能。我需要查询数据库以从用户购物车表中选择产品,从产品表中选择产品详细信息(图像、名称、库存量等)并检查产品是否已保存(在保存的表中)

这是表的架构:

  • 产品

id | Name | Price | Description | Vendor | Tag | Rating | Image | AmountInStock

  • 已保存

id | user_ID | product_id

  • 购物车

id | user_ID | product_id

这是我目前写的查询:

SELECT c.id, p.name as product_name, c.user_id, c.product_id,
  COUNT(c.product_id) as product_count, p.price, p.description, 
  p.vendor, p.tag, p.rating, p.image, p.amountInStock, 
  COUNT(s.product_id) as inSaved
FROM cart c, products p, saved s
WHERE p.id = c.product_id
AND C.user_id = '13'
GROUP BY c.product_id, c.user_id
HAVING COUNT(c.product_id) > 0;

【问题讨论】:

  • 你没有提供任何Schema,你只是列出了列名;提供模式将是 create table 语句,包括数据类型、默认值、键、约束等。
  • 向我们展示您想要的输出
  • 您按了太多次comma 键。这不可避免地会导致JOIN 错误。使用联接编写查询更像这样:SELECT ... FROM t1 JOIN t2 ON ... JOIN t3 ON ... etc; 如果这样做,您会注意到缺少 s 逻辑。还有其他设计问题。但这是您当前声明的主要问题之一。另外,查看LEFT JOINNOT INNOT EXISTS,这将有助于is / is not saved 逻辑。

标签: mysql sql


【解决方案1】:

没有任何测试我会尝试这样的事情:

SELECT c.id, p.name as product_name, c.user_id, c.product_id,
  COUNT(c.product_id) as product_count, p.price, p.description, 
  p.vendor, p.tag, p.rating, p.image, p.amountInStock, 
  COUNT(s.product_id) as inSaved, s.product_id
FROM cart c, products p, saved s
LEFT JOIN saved 
ON(p.id=s.id)
WHERE c.product_id= s.product_id
AND C.user_id = '13'
GROUP BY c.product_id, c.user_id
HAVING COUNT(c.product_id) > 0;

所以关键是左连接。第一个表中的每个 id 都与第二个表链接。如果为null,则不保存产品,如果有id,则保存产品。

它未经测试,但理论上我认为这是要走的路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2018-12-10
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多