[Помогите] Поиск название + модель + sku

Тема в разделе "OpenCart", создана пользователем alex_storm, 8 июн 2015.

  1. alex_storm

    alex_storm webdev

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Друзья, подскажите пожалуйста, может кто сталкивался,
    как правильно реализовать поиск в опенкарте если ввели название товара + модель (по умолчанию не ищет вообще)

    Например взять и написать так
    Код:
    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
    Ну логично в общем то, но он же описывает ниже и выше, как переменна.
    Вот не пойму
     
  2. Strannik69

    Strannik69

    Регистрация:
    6 окт 2013
    Сообщения:
    180
    Симпатии:
    488
    есть же кучка модулей начиная от бесплатного ExtendedSearch
    до всяких платных типа iSearch
    AJAX Search и уже на форуме
     
  3. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Конечно, выдаёт ошибку - модель хранится в основной таблице товаров, а не в таблице описаний. И с 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).
     
  4. alex_storm

    alex_storm webdev

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Данные модули не решают проблему)

    Да, точно, я походу не там пробовал. Спасибо.
    Если делать OR, то разброс выдачи релевантности нереально огромный)

    Например указав модель + часть название товара, по этой выдаче сортировка будет произведена по алфавиту, а не по большому проценту совпадений.
    Модуль релевантности не помог(
     
  5. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Я не знаю, как там выглядят эти поля у товаров, но, например, если есть текстовое название товара, цифробуквенная модель и цифровой sku, а я ищу, например, по слову чашка - я не найду ничего, потому что "чашка" ест только в названии, но не в модели и sku, а AND требует их наличия там.
    Правда, я не знаю, как выглядит весь алгоритм, но этот кусок сработает именно так.
     
  6. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    Можно по пробелу разбить и искать уже каждое в отдельности... например:
    Код:
    $my_text  = "Супер мега крутой модуль ПРО";
    $slova = explode(" ", $my_text);
    echo $slova[0]; // Супер
    echo $slova[1]; // мега
    ...
    А потом запросишКо в БД, как посоветовал Dotrox по OR
     
    Последнее редактирование: 9 июн 2015
  7. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Мне кажется, массив $words из кода в первом посте - это как раз и есть тот же массив $slova.