我有三张桌子,前两张是相当标准的:
1)PRODUCTS
表:
2)CART
表:
第三种方法是让人们保存他们购买的产品并记录下来。
3)MYPRODUCTS
表:
产品。prod_id
= CART。cart_prodid
= MYPRODUCTS。myprod_pid
当用户订购时,他们会在订单中看到产品列表,并可以选择将该产品添加到我的产品中。 我正在获取他们执行此操作所需的信息,每个订单都有一个类似的查询:
SELECT cart.pid, products.pname, products.pid
FROM products, cart
WHERE products.pid = cart_prodid
AND cart_orderid=orderid
第一次订购时这很好。
但是,如果他们随后重新订购了他们已经添加到myproducts的产品,那么他们就不可能再次将其添加到myproducts - 基本上不是'添加到MyProducts'他们需要看到'在MyProducts中查看”。
我想我可以使用两个查询来分隔产品:
产品从未添加到MyProducts
以某种方式识别用户是否已在MyProducts中拥有该产品,如果是,则将其从上述查询中排除。
MyProducts中的产品
通过颠倒上述过程。
我需要一些关于如何做到这一点的指示。
答案 0 :(得分:0)
他们之前订购的产品:
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
)
答案 1 :(得分:0)
您的myproducts
表中是否需要用户名?
这不会解决您的具体问题,但您是否考虑过更改用户界面?也许用户不应该控制他们购买的产品列表。这似乎是您不必要地使您的界面复杂化。您可以自动将他们订购的每件产品添加到“我的产品”。
此外,我认为您应该跟踪用户订购了相同产品ID的产品数量。在myproducts
表中放置一个“计数”字段以跟踪此情况。您不必实际使用此字段,但您最终可能会后悔不添加此字段。甚至更好 - 为每个添加的产品添加一个新行,以便您也可以跟踪日期/时间。