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




MySQL.RU - Webboard



Вернуться
Логика "И" (Daos) 22/04/2005 - 13:12:10
      Re: Логика из области фанастики (Валентин) 22/04/2005 - 17:26:41
      Re: Логика из области фанастики (Daos) 22/04/2005 - 17:32:53
      Re: Логика из области фанастики (Daos) 22/04/2005 - 17:44:15
      Re: Вопрос не точный (Валентин) 22/04/2005 - 17:45:29
      Re: Логика из области фанастики (Daos) 22/04/2005 - 17:48:59
      Re: Неправильная у тебя логика (Валентин) 22/04/2005 - 17:53:28
      Re: Вопрос не точный (Daos) 22/04/2005 - 17:55:47
      Re: Теперь точный (Валентин) 22/04/2005 - 18:19:44
      Re: Теперь точный (Daos) 22/04/2005 - 18:44:55
      Re: Всегда есть более 1-го решения (Валентин) 25/04/2005 - 10:49:25

> Original message text:
> From: Daos - 22/04/2005 - 13:12:10
> Subject:Логика "И"
> -----------------
> Вобщем возьмем для примера простую таблицу
>
> key | vol
> 1 1
> 1 2
> 2 1
> 2 2
> 3 1
>
> Задача вытащить все key у которых vol = 1 И vol = 2 (то есть условию отвечают key 1 и 2)
>
> Вариант с IN(1,2) неподходит так как он ищет по условию ИЛИ и при таком раскладе сюда попадает и key 3 а это неверно.
>
> Есть ли варинт сделать такое без объединения этой таблицы самой с собой? Потому как на реальном примере условий может быть больше чем 2 скажем до 7-8 и я опасаюсь за быстродействие этой схемы, подскажите кто с этим сталкивался пути решения если они есть.
>
> Пример с объединением таблицы решающей эту задачу:
>
> SELECT * FROM table t1, table t2 WHERE t1.key = t2.key AND t1.vol = 1 AND t2.vol = 2
>


From: Daos - 22/04/2005 - 18:44:55
Subject:Теперь точный
-----------------
Вот, это другое дело! Спасибо. Вобщем итог такой на реальном примере.

Пока есть 2 варианта, первый мой с объединением таблицы саму на себя столько раз сколько условий. EXPLAIN даёт: Using where;

Твой вариант. EXPLAIN даёт в extra: Using where; Using temporary; Using filesort. Так как на реальном примере есть сортировка ORDER и во втором примере она не совпадает с условием в GROUP отсюда временная таблица.


Отсюда вопрос, в принципе пока товаров мало это работает быстро, но их будет много и вариаций цвета ещё больше, как это всё себя поведёт. Может стоить искать альтернативные схемы? Ведь вроде простая задача, а такие нетривиальные решения!

Как вариант родилась идея:

Таблица цветов:
id | color

1 | red
2 | black

Таблица связи:
tovar_id | color_id

1 | 1
1 | 2
2 | 1
2 | 2
2 | 1


Таблица товаров вводим строку opt_set которая содержит все сочетания для товара например через запятую:

id | opt_set

1 | 1,2
2 | 1,2
3 | 1

Тогда наше условие можно решить таким образом:

select *
from tovars
where LOCATE(1, opt_set) <> 0 and LOCATE(2, opt_set) <> 0

Как такой варинт?


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

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

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



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