







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