Новости
Документация
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

> Original message text:
> 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) ну и далее выводим данные покупателей.
>


From: TM123 - 12/11/2010 - 21:36:30
Subject:Значения, кот. повторяются только 1 раз.
-----------------
1. А у вас может быть один и тот же товар в заказе 2 раза?
2. Используйте вместо in конструкцию inner join


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
37687



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