簡體   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