繁体   English   中英

如何根据第三记录是否存在查询两个表?

[英]How to query two tables based on whether or not record exists in a third?

我有三个表,前两个表相当标准:

1) PRODUCTS表:

  • pid
  • pname等

2) CART表:

  • cart_id
  • cart_pid
  • cart_orderid等

第三个目的是让人们保存他们购买的产品并在上面留下记号。

3) MYPRODUCTS表:

  • myprod_id
  • myprod_pid

产品。 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

第一次订购时很好。

但是,如果他们随后重新订购了已经添加到我的产品中的产品,则他们应该不可能再次将其添加到我的产品中-基本上,而不是“添加到我的产品”中,他们需要看到“在我的产品中查看”。

我想我可以使用两个查询来分离产品:

  1. 从未添加到“我的产品”中的产品

    通过某种方式确定用户是否已经在MyProducts中拥有该产品,如果可以,则从上面的查询中将其排除。

  2. 我的产品中已有产品

    通过逆转上述过程。

我需要一些有关如何执行此操作的指示。

他们之前订购的产品:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM