![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
ivashka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Здравствуйте. Есть таблица вида:
id (auto_increment) id_item (int(4), id товара) value (int(4), id значения) Вобщем суть в чем. В таблице сохраняются все параметры товаров. Берем товар: Samsung 943N (id товара = 1) Цвет черный - value=1 (поле валие) Производитель Samsung value=2 Есть выход VGA (value=3) и т.д. и еще очень много Получаем записи вида: id id_item value 1 1 1 2 1 2 3 1 3 и т.д. (value и ID не обязательно совпадают) Тоесть для одного товара есть много значений. Я делаю запрос к таблице, который мне вернет id товара в которых есть только определенные параметры. Сейчас запрос получается вида: SELECT `id_item` FROM `ls_values_select` where (id_item IN (SELECT id_item FROM `ls_values_select` WHERE `value`='31' or `value`='95' or `value`='93' )) and (id_item IN (SELECT id_item FROM `ls_values_select` WHERE `value`='34' )) Каждый подзапрос ((id_item IN (SELECT id_item FROM `ls_values_select` WHERE `value`='31' or `value`='95' or `value`='93' )), это то что хочет видеть пользователь из одной групы параметров, припустим: Група №1 (производитель): Samsung (id параметра - 1) Asus (id параметра - 2) Acer (id параметра - 3) DELL (id параметра - 4) Група №2 (цвет): черный (id параметра - 5) белый (id параметра - 6) синий (id параметра - 7) серый (id параметра - 8) и т.д. и груп получается около 100. Этот запрос (что я привел выше) прекрасно работал пока товаров было меньше 100, а дальше каждый такой запрос на выделеной машине исполняется около 30-40 секунд, эт не есть гуд. Опишу запрос на словах: Хочу выбрать все товары у которых производитель либо Samsung либо DELL и обязательно черные, в результате получится запрос: SELECT `id_item` FROM `ls_values_select` where (id_item IN (SELECT id_item FROM `ls_values_select` WHERE `value`='1' or `value`='4')) and (id_item IN (SELECT id_item FROM `ls_values_select` WHERE `value`='5' )) Как мне решить проблему со скоростью? Можно ведь как-то переписать запрос, что бы не было под запросов. Мысль наталкивает на JOIN, но как "отджойнить" одну таблицу не знаю... Помогите пожалуйста, если можно с примером. Спасибо. Это сообщение отредактировал(а) ivashka - 28.7.2011, 21:56 |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |