![]() |
|
Модераторы: skyboy |
![]()
|
|
| Awell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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` - не катит ... (понимаю что запрос не верный, но для полноты картины отправляю на чем остановился) |
|||
|
||||
| igorold |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Две маленькие поправочки. Во-первых, считать надо count(distinct var_id). Во-вторых, требуется строгое равенство количеству параметров. Т.е. для приведённого примера - двум. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| igorold |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 22.12.2005 Где: Россия->Урал-& gt;Миасс Репутация: 5 Всего: 17 |
Если count(distinct var_id), то да, ровно 2
Я заложился на дубли, но забыл, что может быть дубль одного параметра без второго. Если дублей быть не может, то мой пример будет работать без вопросов, но ваша поправка будет работать при любых условиях. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Движок MySQL не умеет обеспечивать такие констрейнты :( хотя, если там в структуре нет истории... Это сообщение отредактировал(а) Akina - 21.3.2014, 13:41 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |