|
MySQL.RU - Webboard
Вернуться
Значения, кот. повторяются только 1 раз. (Дима) 08/11/2010 - 15:33:48
Re: Значения, кот. повторяются только 1 раз. (TM123) 12/11/2010 - 21:36:30
Re: Значения, кот. повторяются только 1 раз. (Елена) 14/11/2010 - 01:35:32
From: Дима - 08/11/2010 - 15:33:48
Subject:Значения, кот. повторяются только 1 раз.
-----------------
Добрый день, нужна помощь.
Вроде бы составил нужный запрос, но он получился громоздкий и долго выполняется.
Покритикуйте пожалуйста, м.б. есть более оптимальный вариант.
Суть такая:
есть три таблицы: 1) покупатели 2) заказы 3) содержимое заказа.
Задача: отобрать всех покупателей, которые делали только один заказ (и этот заказ выполнен) с определенным составом заказа.
У меня получилось вот так:
select * from `customers` WHERE `id` IN (
SELECT `custom_id`
FROM `orders`
WHERE `status`='complete'
AND `id` IN (
SELECT `id_order` FROM `items`
WHERE INSTR(`title`,'Набор')>'0'
group by `id_order`
HAVING count(*) = 1)
group by `custom_id`
HAVING count(*) = 1)
Смылс такой:
1) из таблицы наименований товара `items` сначала отбираем все ID заказов, которые содержат нужный товар (в названии которого есть слово 'Набор') и при этом не содержат других товаров.
Вот этот подзапрос:
SELECT `id_order` FROM `items`
WHERE INSTR(`title`,'Набор')>'0'
group by `id_order`
HAVING count(*) = 1
2) Далее среди этих ID заказов отбираем только те, которые в статусе 'complete' и на этот же ID покупателя нет других заказов:
SELECT `custom_id`
FROM `orders`
WHERE `status`='complete'
AND `id` IN (
SELECT `id_order` FROM `items`
WHERE INSTR(`title`,'Набор')>'0'
group by `id_order`
HAVING count(*) = 1)
group by `custom_id`
HAVING count(*) = 1)
3) ну и далее выводим данные покупателей.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
37687
|
|