Собственно есть 3 таблицы. products со списком товаров tags со списком тегов products_to_tags со списком соответствия id тегов id товаров Надо поискать в паре полей таблицы и в поле таблицы tags значение. После вывести все товары где оно присутствует. самый очевидный вариант Код (Text): select distinct p.products_id, p.products_name, p.products_image, p.products_price from products p left join products_to_tags ptt on p.products_id = ptt.products_id left join tags t on ptt.tag_id = t.id where p.products_status = '1' and (p.products_name like '%искомое_значение%' or p.products_description like '%искомое_значение%' or p.products_model like '%искомое_значение%' or t.name like '%искомое_значение%') вариант работает. Но работает медленно и грузит сервер. второй вариант Код (Text): select distinct p.products_id, p.products_name, p.products_image, p.products_price from products_to_tags ptt, tags t, products p where p.products_status = '1' AND p.products_id = ptt.products_id and ptt.tag_id = t.id and (p.products_name like '%искомое_значение%' or p.products_description like '%искомое_значение%' or p.products_model like '%искомое_значение%' or t.name like '%искомое_значение%') работает быстро но, выдаёт только найденное в t.name, что в прочем не удивительно ибо AND p.products_id = ptt.products_id and ptt.tag_id = t.id в данном варианте требуют именно этого. Собственно как сделать быстрее и правильно? Добавлено спустя 20 минут 47 секунд: Зы: Знаю что вообще этот принцип не есть верный и текст надо индексировать а после уже по индексам выбирать из базы. Но времени делать "как надо" увы нет, приходится искать самое оптимальное из не оптимального...
давайте определимся с тормозиловом. Если делать один запрос с %% по имени, а второй отдельно по тегам, то по сколько времени они отдельно исполняться будут?
Вариант выбрать два массива а потом уже их объединить удаляя дубликаты я уже рассматривал. Да так быстрее. Вот пример: 4.3458 сек. - одним запросом 0.0144 сек. - отдельно по тегам 0.0535 сек. - отдельно по имени, описанию и модели Этот вариант и буду юзать если варианта быстрее выбрать всё и сразу не найду. Собственно напрягает он только из-за большого количества мест куда придётся впихнуть разные костыли.