2009-09-14 46 views
0

我有三個表中,第一兩個相當標準:如何根據第三個記錄是否存在來查詢兩個表?

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

當用戶下單時,他們會看到他們訂單上的產品列表,並可以選擇將該產品添加到我的產品中。 我得到的信息所必需的他們做到這一點,有一個查詢像這樣每個訂單:

SELECT cart.pid, products.pname, products.pid 
FROM products, cart 
WHERE products.pid = cart_prodid 
AND cart_orderid=orderid 

這是好的他們第一次訂購。

但是,如果他們隨後重新排列他們已經添加到myproducts的產品,那麼他們不應該再次將它添加到myproducts--基本上不是「添加到MyProducts」,他們需要查看「View in我的產品。

我想我可以用兩個查詢分開的產品:

  1. 產品從未添加到我的產品

    通過某種方式識別用戶是否在我的產品的產品已經,如果是將其排除從上面的查詢。

  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聲明,這是遵循更自然閱讀:

+0

您需要編輯問題中的表格定義,以獲得pid vs prod_id的一致性。您還可以更好地在列名稱上刪除每個表前綴,併爲每個表中的相同屬性一致地使用相同的名稱。所以,如果您選擇prod_id來識別產品,那麼您可以使用products.prod_id和cart.prod_id以及myproducts.prod_id。 – 2009-09-15 02:30:27

+0

您還需要考慮用戶的身份。您似乎在訂單描述(包括客戶ID)和訂單行項目中使用「購物車」表 - 訂購商品。該設計尚未完全標準化。此外,目前,我沒有看到MyProducts表的好處;爲什麼不簡單地瀏覽他們最近從以前的購物車中訂購的清單?你提到'評論',但你不會顯示它們。 – 2009-09-15 02:33:36

回答

0

產品之前,他們已經下令。我已經優先考慮上述情況,因爲它很可能是一種更快的操作。

SELECT products.pname, products.pid 
from products p 
WHERE p.prodid NOT IN 
(
    SELECT prodid 
    FROM myproducts 
) 
0

您是否需要myproducts表中的用戶ID?

這不會回答您的具體問題,但是您是否考慮過在用戶界面中進行更改?也許用戶不應該控制他們購買的產品列表。這似乎是你不必要地使你的界面變得複雜。您可以自動將他們訂購的每個產品添加到「我的產品」中。

此外,我認爲你應該跟蹤用戶訂購了多少產品的相同產品ID。在myproducts表中放置一個「計數」字段以跟蹤此情況。你不必真的使用這個字段,但你最終可能會後悔不加這個。或者更好 - 爲每個添加的產品添加一個新行,以便您可以跟蹤日期/時間。

+0

我知道這似乎是一件奇怪的事情要做 - 但相信我,在這個網站的背景下,它是非常有意義的。伯爵的想法非常出色 - 我沒有想到這一點。謝謝! – Katherine 2009-09-14 20:54:27

相關問題