Новости
Документация
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: Валентин - 25/04/2005 - 10:49:25
Subject:Всегда есть более 1-го решения
-----------------
SQL-решения бывают разные, можно написать красивое, можно длинное, но на первый взляд быстрое.

На практике UNION кучи датасетов работает не намного быстрее нежели подрезка по агрегатному полю, но несомненно быстрее.
Когда табличка большая, то у сервера может не получатся связывать на лету и он хотя-бы 1 датасет будет выкладывать на диск, но это не станет ясно, пока это действительно не произойдет.
Вариант с having - красивый и удобный в написании, но для работы
требует суммы с группировкой, сервер может не ложить на диск данные, если у него будет достаточный кеш ключей, и скорость будет достаточной.

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

Вместо locate можно использовать FIND_IN_SET(MySubStr,STR) начиная с версии 4.1.0(1) - точно не помню.
В качетсве подстроки можно ложить ключ цвета и искать в строке, проверено.

Я задачу подобную твоей решил шаблонами, и сохранял шаблон (у тебя цветов), а для конкретного товара ставил отклонения от шаблона, если были. Именно ключ шаблона, а не набор цветов. Но вариант с накапливанием в поле цветов - очень хороший и практичный.
Запрос выглядит двойным левым объединением товара с табличками связей и отсеивания в Where отклоненй от шаблонов.
Примерно так :)


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

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

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



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