У меня есть следующий сценарий:
1 Клиент имеет 2 списка товаров (один общий, один частный), в этих списках много продуктов, некоторые продукты могут появиться в двух списках. Если продукт появится в личном списке, я хочу получить его, в противном случае я возьму тот, что в общем списке.
Какой самый быстрый способ достичь этого, по вашему мнению? До сих пор я пробовал следующее:
Есть ли другие возможности для достижения этой цели?
РЕДАКТИРОВАТЬ
Вот скрипка, демонстрирующая, что у меня есть http://sqlfiddle.com/#!6/41d2e/2
В скрипте я предполагаю, что идентификаторы списка 7 и 1 являются идентификаторами списка для клиента 1, я не использовал объединение, так как у меня уже есть идентификатор, полученный из php.
Что мне нужно, это получить продукт из личного списка, если существует, в противном случае из публичного
Будучи в большей степени mysql-парнем, я обычно делал бы это с группой без агрегатов, так что при правильном порядке mysql просто обрезал нежелательные записи (плохая практика, но достаточно надежная и производительная):
select *
from pricelist
where listId in (1, 7)
order by listId asc
group by artnum
Так, например, если я хочу получить все продукты для клиента с идентификатором 1, мне нужно получить следующие данные:
ID ARTNUM ARTDES LISTID PRICE
1 1000 potatoes 1 20
1 1001 carrots 7 4
Поскольку у клиента 1 есть 2 списка: 1 и 7 (картофель появляется в списках 1 и 7, поэтому я просто хочу, чтобы картофель был в личном списке клиента, а не в публичном)
Надеюсь, я достаточно ясен, извините за все эти правки
Поскольку я не мог понять, как сделать это правильно в чистом SQL, я использовал метод PHP:
Других решений пока нет …