我有三個表中,第一兩個相當標準:如何根據第三個記錄是否存在來查詢兩個表?
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我的產品。
我想我可以用兩個查詢分開的產品:
產品從未添加到我的產品
通過某種方式識別用戶是否在我的產品的產品已經,如果是將其排除從上面的查詢。
產品已經在我的產品
通過逆轉上述過程。
我需要一些關於如何做到這一點的指針。
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
聲明,這是遵循更自然閱讀:
您需要編輯問題中的表格定義,以獲得pid vs prod_id的一致性。您還可以更好地在列名稱上刪除每個表前綴,併爲每個表中的相同屬性一致地使用相同的名稱。所以,如果您選擇prod_id來識別產品,那麼您可以使用products.prod_id和cart.prod_id以及myproducts.prod_id。 – 2009-09-15 02:30:27
您還需要考慮用戶的身份。您似乎在訂單描述(包括客戶ID)和訂單行項目中使用「購物車」表 - 訂購商品。該設計尚未完全標準化。此外,目前,我沒有看到MyProducts表的好處;爲什麼不簡單地瀏覽他們最近從以前的購物車中訂購的清單?你提到'評論',但你不會顯示它們。 – 2009-09-15 02:33:36