Как запросить две таблицы в зависимости от того, существует запись в третьей или нет? - PullRequest
0 голосов
/ 15 сентября 2009

У меня три таблицы, первые две довольно стандартные:

1) PRODUCTS таблица:

  • 1007 * PID *
  • pname и т. Д.

2) CART таблица:

  • cart_id
  • cart_pid
  • cart_orderid и т. Д.

Третий предназначен для того, чтобы люди могли сохранять продукты, которые они покупают, и хранить на них заметки.

3) MYPRODUCTS таблица:

  • myprod_id
  • myprod_pid

ПРОДУКТЫ. prod_id = КОРЗИНА. 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, тогда они НЕ ДОЛЖНЫ добавлять его в myproducts снова - в основном вместо «Добавить в MyProducts» им нужно видеть «View in MyProducts». .

Я думаю, что могу разделить продукты, используя два запроса:

  1. Продукты, не добавленные в MyProducts

    Каким-то образом определив, есть ли у пользователя продукт в MyProducts, и если это так, исключив его из запроса выше.

  2. Продукты уже в MyProducts

    В обратном порядке.

Мне нужны некоторые указатели о том, как это сделать.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2009

Вам не нужен идентификатор пользователя в таблице myproducts?

Это не ответит на вашу конкретную проблему, но рассматривали ли вы изменение в пользовательском интерфейсе? Возможно, пользователь не должен контролировать свой список покупаемых продуктов. Кажется, что вы излишне усложняете свой интерфейс. Вы можете автоматически добавлять каждый заказанный товар в «Мои продукты».

Кроме того, я думаю, вы должны отслеживать, сколько продуктов заказал пользователь с одним и тем же идентификатором продукта. Поместите поле «count» в таблицу myproducts, чтобы отслеживать это. Вам не обязательно использовать это поле, но вы можете в конечном итоге сожалеть, что не добавили это. Или еще лучше - добавьте новую строку для каждого добавленного продукта, чтобы вы также могли отслеживать дату / время.

0 голосов
/ 15 сентября 2009

Продукты, которые они заказывали раньше:

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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...