Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложный запрос, Не получается запрос ( 
:(
    Опции темы
Awell
Дата 20.3.2014, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 20.3.2014

Репутация: нет
Всего: нет



Добрый день. Последняя надежда на Вас, форумчане ...

Есть таблица с 3 колонками:

------------------------------
| id_el | var_id | value |
------------------------------
| 1      | 1         | 15 |
------------------------------
| 1      | 2         | 17 |
------------------------------
| 1      | 3         | 5000 |
------------------------------
| 2      | 1         | 16 |
------------------------------
| 2      | 2         | 18 |
------------------------------
| 2      | 3         | 6000 |
------------------------------
| 3      | 1         | 15 |
------------------------------
| 3      | 2         | 19 |
------------------------------
| 3      | 3         | 5000 |
------------------------------


id_el - идентификатор товара
var_id - идентификатор характеристики (например: длина, высота, вес) - хранится в другой таблице
value - значение
!Первую колонку с идентификатором строки (id) не нарисовал, ща уже сложно дорисовывать - будем думать что она есть если нужна!

Пускай var_id = 1 - это длина, 2 - высота, 3 - вес

Мне нужно выбрать все товары с длиной 15 и весом 5000 (а вообще переменных может быть много)

SELECT `id`, `id_el` FROM `addwatch_com_market_values` WHERE (`var_id` = '1' && `value` = '15') && (`var_id` = '3' && `value` = '5000') GROUP BY `market_id` ORDER BY `market_id` - не катит ... (понимаю что запрос не верный, но для полноты картины отправляю на чем остановился)
PM MAIL   Вверх
igorold
Дата 21.3.2014, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 5
Всего: 17



Т.е. тебе надо, чтобы у товара присутствовали 2 эти характеристики.
Делаешь выбор из товаров, к ним присоединяешь (left join) эти характеристики, где (`var_id` = '1' and `value` = '15') or (`var_id` = '3' and `value` = '5000')
считаешь по count(id) сколько присоединилось и делаешь условие having(count(id))>1
конечно нужна группировка по иду товара.

Т.к. таблиц и полей не вижу, пишите запрос сами, идея должна быть понятна.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Akina
Дата 21.3.2014, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(igorold @  21.3.2014,  06:44 Найти цитируемый пост)
считаешь по count(id) сколько присоединилось и делаешь условие having(count(id))>1

Две маленькие поправочки.
Во-первых, считать надо count(distinct var_id).
Во-вторых, требуется строгое равенство количеству параметров. Т.е. для приведённого примера - двум.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
igorold
Дата 21.3.2014, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 5
Всего: 17



Если count(distinct var_id), то да, ровно 2

Я заложился на дубли, но забыл, что может быть дубль одного параметра без второго.
Если дублей быть не может, то мой пример будет работать без вопросов, но ваша поправка будет работать при любых условиях.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Akina
Дата 21.3.2014, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(igorold @  21.3.2014,  13:19 Найти цитируемый пост)
Если дублей быть не может

Движок MySQL не умеет обеспечивать такие констрейнты :( хотя, если там в структуре нет истории...

Это сообщение отредактировал(а) Akina - 21.3.2014, 13:41


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.