[英]How to query two tables based on whether or not record exists in a third?
我有三个表,前两个表相当标准:
1) PRODUCTS
表:
2) CART
表:
第三个目的是让人们保存他们购买的产品并在上面留下记号。
3) MYPRODUCTS
表:
产品。 prod_id
= CART。 cart_prodid
= MYPRODUCTS。 myprod_pid
当用户下订单时,系统会向他们显示其订单上的产品列表,并且可以有选择地将该产品添加到myproducts中。 我正在获取他们执行此操作所需的信息,并针对每个订单进行如下查询:
SELECT cart.pid, products.pname, products.pid
FROM products, cart
WHERE products.pid = cart_prodid
AND cart_orderid=orderid
第一次订购时很好。
但是,如果他们随后重新订购了已经添加到我的产品中的产品,则他们应该不可能再次将其添加到我的产品中-基本上,而不是“添加到我的产品”中,他们需要看到“在我的产品中查看”。
我想我可以使用两个查询来分离产品:
从未添加到“我的产品”中的产品
通过某种方式确定用户是否已经在MyProducts中拥有该产品,如果可以,则从上面的查询中将其排除。
我的产品中已有产品
通过逆转上述过程。
我需要一些有关如何执行此操作的指示。
他们之前订购的产品:
SELECT cart.pid, products.pname, products.pid
from products p
inner join cart c on p.prodid = c.cart_prodid
WHERE cart_orderid=orderid
他们从未订购过的产品
SELECT products.pname, products.pid
from products p
left join myproducts mp ON p.prodid = mp.prodid
WHERE mp.prodid IS NULL
上面的查询可能更自然地显示为NOT IN
语句,随后将执行该语句。 我已经优先考虑了上述内容,因为它很可能是更快的操作。
SELECT products.pname, products.pid
from products p
WHERE p.prodid NOT IN
(
SELECT prodid
FROM myproducts
)
您在myproducts
表中是否不需要用户ID?
这不会解决您的特定问题,但是您是否考虑过更改用户界面? 也许用户不应该控制他们购买的产品列表。 看来您不必要地使界面复杂化。 您可以将他们订购的每个产品自动添加到“我的产品”中。
另外,我认为您应该跟踪用户订购了同一产品ID的产品数量。 在myproducts
表中放置一个“ count”字段以进行跟踪。 您不必实际使用此字段,但是最终您可能会后悔没有添加此字段。 甚至更好-为添加的每个产品添加新行,以便您也可以跟踪日期/时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.