Друзья, подскажите пожалуйста, может кто сталкивался, как правильно реализовать поиск в опенкарте если ввели название товара + модель (по умолчанию не ищет вообще) Например взять и написать так Код: foreach ($words as $word) { $implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%' AND pd.model LIKE '%" . $this->db->escape($word) . "%' AND pd.sku LIKE '%" . $this->db->escape($word) . "%' "; } Т.е. учитываю имя + модель и + sku выдает ошибку PHP Notice: Error: Unknown column 'pd.model' in 'where clause'<br />Error No: 105 Ну логично в общем то, но он же описывает ниже и выше, как переменна. Вот не пойму
есть же кучка модулей начиная от бесплатного ExtendedSearch до всяких платных типа iSearch AJAX Search и уже на форуме
Конечно, выдаёт ошибку - модель хранится в основной таблице товаров, а не в таблице описаний. И с sku то же самое. То есть, надо так: Код: "pd.name LIKE '%" . $this->db->escape($word) . "%' OR p.model LIKE '%" . $this->db->escape($word) . "%' OR p.sku LIKE '%" . $this->db->escape($word) . "%' " И вместо AND надо OR иначе сильно сомневаюсь, что оно что-то найдёт (с AND получается, что ключевое слово обязательно должно быть и в названии и в моделе и в sku).
Данные модули не решают проблему) Да, точно, я походу не там пробовал. Спасибо. Если делать OR, то разброс выдачи релевантности нереально огромный) Например указав модель + часть название товара, по этой выдаче сортировка будет произведена по алфавиту, а не по большому проценту совпадений. Модуль релевантности не помог(
Я не знаю, как там выглядят эти поля у товаров, но, например, если есть текстовое название товара, цифробуквенная модель и цифровой sku, а я ищу, например, по слову чашка - я не найду ничего, потому что "чашка" ест только в названии, но не в модели и sku, а AND требует их наличия там. Правда, я не знаю, как выглядит весь алгоритм, но этот кусок сработает именно так.
Можно по пробелу разбить и искать уже каждое в отдельности... например: Код: $my_text = "Супер мега крутой модуль ПРО"; $slova = explode(" ", $my_text); echo $slova[0]; // Супер echo $slova[1]; // мега ... А потом запросишКо в БД, как посоветовал Dotrox по OR