![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| DeamonShan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 26.11.2005 Репутация: нет Всего: 6 |
Всем привет!
У меня такая проблема: Есть таблица товаров. в таблице поле filtеr отвечает за поиск, то есть товар ищется по критериям, записанных в поле filtеr, например есть запись: table:tovar id | name | filter ---------------------------- 1 | Tovar #1 | 2,6,4 значения поля filter через запятую означают id таблицы фитров: table:filter id | name ----------------------------- 1 | DDR1 2 | DDR3 4 | CPU Core 2 Duo 5 | HDD 25Gb 6 | HDD 500Gb таким образом товар с ID=1 со значением filter=2,6,4 есть товар, с критериями DDR3 и HDD 500Gb и CPU Core 2 Duo. Такой вопрос: Как сделать выборку по фильтру, если я в поиске указал критерии DDR3 [и HDD 500Gb [и CPU Core 2 Duo]]? Подскажите, пожалуйста, как составить такой запрос. А если есть другой алгоритм и нужно перестроить таблицы, тоже буду рад выслушать Вас |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
нужно перестроить таблицы
добавь связную таблицу tovar_has_filter к примеру, чтобы она реализовывала связь многие-ко-многим между таблицами tovar и filter [tovar] ID_tovar name [filter] ID_filter name [tovar_has_filter] ID_tovar ID_filter -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Ну, дык! Понятно, что реляционные базы и "значения индексов через запятую" не очень-то связаны друг с другом. Можно посоветовать поле фильтр трансформировать в таблицу {id_товара, id_фильтра}, при этом товару Tovar #1 будет соответствовать 3 строчки таблицы. Тогда и запрос будет выглядеть более реляционным... а так - можно использовать строковые операции в mysql критерий поиска по фильтру 2 будет выглядеть как-то так
Правда надеятся на производительность с большой таблицей, наверное, не придется ;) Можно обрамить запятыми значение поля filter прямо в таблице, чтобы не напрягать этим запрос... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| DeamonShan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 26.11.2005 Репутация: нет Всего: 6 |
patap, я вашим советом воспользуюсь... как тогда в таком случае составить запрос?
Добавлено через 7 минут и 32 секунды ksnk, да, таблица огромная будет, поэтому думаю стоит завесит третью таблицу... |
|||
|
||||
| patap |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
ну я бы так сделал
если нужно вернуть только товар, без фильтров
либо, если нужно вывести еще и филтры, тогда так. Потом на стороне пхп привести результат к нормальному виду
условие по фильтрам подгони под свои нужды (LIKE если нужно) Это сообщение отредактировал(а) patap - 11.5.2011, 10:32 -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||
|
|||||
| DeamonShan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 26.11.2005 Репутация: нет Всего: 6 |
не совсем понял вот этот момент... на входе известны только ID фильтров... |
|||
|
||||
| patap |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
а, ну тогда там нужно заменить name на ID_filter
или так
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||
|
|||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 1 Всего: 28 |
||||
|
||||
| DeamonShan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 26.11.2005 Репутация: нет Всего: 6 |
то есть то что в скобках, нужно построить по средством PHP и составить запрос?
|
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 1 Всего: 28 |
а, ну уже разобрались)
|
|||
|
||||
| patap |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
да,
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||
|
|||||
| DeamonShan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 26.11.2005 Репутация: нет Всего: 6 |
огромное спасибо.... +
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |