[英]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.