查找用户购物车表中的所有产品并检查产品是不是在已保存项目表中

Posted

技术标签:

【中文标题】查找用户购物车表中的所有产品并检查产品是不是在已保存项目表中【英文标题】: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 逻辑。 【参考方案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,则保存产品。

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

【讨论】:

以上是关于查找用户购物车表中的所有产品并检查产品是不是在已保存项目表中的主要内容,如果未能解决你的问题,请参考以下文章

检查所选产品和添加到购物车的产品是不是相同

如何检测数组中的相同元素并总结数量?

如何从html中的表中的一行返回单个数据?

SQL多对多,如何检查多行的条件

如何检查购物车中每个产品的库存

asp.net mvc视图中的C#复选框事件不在表单内