Kayıt, bir üçüncü var olup olmadığını dayalı iki tablo nasıl sorgulanır?

2 Cevap php

Ben üç tablo, ilk iki oldukça stveart vardır:

1) PRODUCTS tablosu:

  • pid
  • pname, vs

2) CART tablosu:

  • cart_id
  • cart_pid
  • cart_orderid vb

Üçüncü insanların satın aldıkları ürünleri kaydetmek izin ve onlarla ilgili notlar tutmak için tasarlanmıştır.

3) MYPRODUCTS tablosu:

  • myprod_id
  • myprod_pid

ÜRÜN. prod_id = CART. cart_prodid = MYPRODUCTS. myprod_pid

When a user orders, they vardır presented with a list of products on their order, ve can optionally add that product to myproducts. I am getting the info necessary for them to do this, with a query something like this for each order:

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

Bu, sipariş ilk kez gayet iyi.

Temelde yerine 'MyProducts Ekle' onlar 'MyProducts Görüntüle' görmek gerekir arasında - onlar sonradan onlar zaten myproducts eklediğiniz bir ürünü yeniden düzenlemek eğer onları tekrar myproducts eklemek için Ancak, daha sonra mümkün olmaMAlıdır.

Ben iki sorguları kullanarak ürünlerini ayırabilirsiniz düşünüyorum:

  1. Ürünler MyProducts ekledi asla

    Şekilde kullanıcı zaten MyProducts ürünü vardır ve bu yüzden yukarıdaki sorgudan onu hariç eğer olmadığının belirlenmesi ile.

  2. Önceden MyProducts ürünler

    Yukarıdaki işlemi tersine çevirerek.

Ben bu olsa yapmak için bazı işvardırtçiler gerekir.

2 Cevap

Daha önce sipariş ettik Ürünler:

SELECT cart.pid, products.pname, products.pid 
from products p
inner join cart c on p.prodid = c.cart_prodid
WHERE cart_orderid=orderid

Daha önce hiç sipariş ettik Ürünler

SELECT products.pname, products.pid 
from products p
left join myproducts mp ON p.prodid = mp.prodid
WHERE mp.prodid IS NULL

Yukarıdaki sorgu takip etmek bir NOT IN deyimi, gibi daha doğal okuyabilirsiniz. Büyük olasılıkla daha hızlı bir işlem olduğu için ben yukarıdaki öncelik ettik.

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

Eğer myproducts tabloda bir kullanıcı kimliği gerekmez mi?

Bu özel sorunu cevaplamak için gitmiyor, ancak kullanıcı arabiriminde bir değişiklik kabul var? Belki kullanıcı satın alınan ürünlerin kendi listesini kontrol edilmemelidir. Eğer gereksiz yere arayüzü zorlaştıran gibi bu görünüyor. Siz otomatik olarak "Benim Ürünleri" emretti her ürün ekleyebilirsiniz.

Ayrıca, ben aynı ürün kimliği emretti kaç ürün kullanıcı izlemek gerektiğini düşünüyorum. Bu takip etmek myproducts tabloda bir "sayısı" alanını koymak. Aslında use bu alan gerekmez, ancak sonunda bu ekleyerek değil pişman olabilir. Ya da daha iyisi - siz de tarih / zaman takip edebilirsiniz böylece eklenen her ürün için yeni bir satır eklemek.