Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
37687



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |