| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Поиск строк со вхождением части строки |
| Автор: DeamonShan 11.5.2011, 08:46 |
| Всем привет! У меня такая проблема: Есть таблица товаров. в таблице поле 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 11.5.2011, 09:20 |
| нужно перестроить таблицы добавь связную таблицу tovar_has_filter к примеру, чтобы она реализовывала связь многие-ко-многим между таблицами tovar и filter [tovar] ID_tovar name [filter] ID_filter name [tovar_has_filter] ID_tovar ID_filter |
| Автор: ksnk 11.5.2011, 09:27 | ||
Ну, дык! Понятно, что реляционные базы и "значения индексов через запятую" не очень-то связаны друг с другом. Можно посоветовать поле фильтр трансформировать в таблицу {id_товара, id_фильтра}, при этом товару Tovar #1 будет соответствовать 3 строчки таблицы. Тогда и запрос будет выглядеть более реляционным... а так - можно использовать строковые операции в mysql критерий поиска по фильтру 2 будет выглядеть как-то так
Правда надеятся на производительность с большой таблицей, наверное, не придется ;) Можно обрамить запятыми значение поля filter прямо в таблице, чтобы не напрягать этим запрос... |
| Автор: DeamonShan 11.5.2011, 09:46 |
| patap, я вашим советом воспользуюсь... как тогда в таком случае составить запрос? Добавлено через 7 минут и 32 секунды ksnk, да, таблица огромная будет, поэтому думаю стоит завесит третью таблицу... |
| Автор: patap 11.5.2011, 10:31 | ||||
| ну я бы так сделал если нужно вернуть только товар, без фильтров
либо, если нужно вывести еще и филтры, тогда так. Потом на стороне пхп привести результат к нормальному виду
условие по фильтрам подгони под свои нужды (LIKE если нужно) |
| Автор: DeamonShan 11.5.2011, 10:39 | ||
не совсем понял вот этот момент... на входе известны только ID фильтров... |
| Автор: patap 11.5.2011, 10:42 | ||||
а, ну тогда там нужно заменить name на ID_filter
или так
|
| Автор: CruorVult 11.5.2011, 10:51 |
только искать нужно не по именам фильтра а не по айди а то мускуль загнется |
| Автор: DeamonShan 11.5.2011, 10:51 |
| то есть то что в скобках, нужно построить по средством PHP и составить запрос? |
| Автор: CruorVult 11.5.2011, 10:51 |
| а, ну уже разобрались) |
| Автор: DeamonShan 11.5.2011, 10:59 |
| огромное спасибо.... + |