Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Неправильная выдача поиска


Radimirich

Recommended Posts

Здравствуйте. Проблема с поиском. Ситуация такая: 

Есть магазин по продаже деталей. В названиях преобладают числа. Например 113620, 233620, 3620 Л, 3620 Г.

Когда в поиск вбиваю например 3620 выдает сначала 113620 потом 23620(а наименовании много) и  только в конце 3620.

А мне нужно чтобы 3620 был в начале. Как это можно это реализовать? 

 

Надіслати
Поділитися на інших сайтах


поэтому и говорю - явно - никак.

 

все сводится к конструкции

%фраза%

 

Можно свести к конструкции

фраза%

%фраза%

Надіслати
Поділитися на інших сайтах

Копай функцию getProducts() в классе ModelCatalogProduct.

Нужно создать SQL-запрос, который выдаст массив товаров с именами, НАЧИНАЮЩИМИСЯ с искомой строки.

Потом к этому массиву добавить массив $product_data[], "родной" для функции. Он выдает товары, у которых имя ПОХОЖЕ (LIKE) на искомую строку.

Исключить дубли.

Вернуть объединенный массив. В нем 3620 будет в начале.

Похоже, для первого запроса достаточно удалить начальный % в строке "pd.name LIKE '%" . $this->db->escape($word) . "%'" (как и предлагает chukcha)

Как-то так...

Змінено користувачем igon
Надіслати
Поділитися на інших сайтах


Попробуйте склонировать метод getProduct() для поиска  и в нем:

ORDER BY name=0, -name DESC, name

Утянуто отсюда

 

По моему может вам помочь.

Надіслати
Поділитися на інших сайтах

Копай функцию getProducts() в классе ModelCatalogProduct.

Нужно создать SQL-запрос, который выдаст массив товаров с именами, НАЧИНАЮЩИМИСЯ с искомой строки.

Потом к этому массиву добавить массив $product_data[], "родной" для функции. Он выдает товары, у которых имя ПОХОЖЕ (LIKE) на искомую строку.

Исключить дубли.

Вернуть объединенный массив. В нем 3620 будет в начале.

Похоже, для первого запроса достаточно удалить начальный % в строке "pd.name LIKE '%" . $this->db->escape($word) . "%'" (как и предлагает chukcha)

Как-то так...

 

Извините я не силен в этом, это все в контроллере search.php нужно править?

Надіслати
Поділитися на інших сайтах


поэтому и говорю - явно - никак.

 

все сводится к конструкции

%фраза%

 

Можно свести к конструкции

фраза%

%фраза%

Сначала в селекте должно быть "=", потом "строка%", потом "%строка", потом "%строка%" - как-то так.

Надіслати
Поділитися на інших сайтах


Сначала в селекте должно быть "=", потом "строка%", потом "%строка", потом "%строка%" - как-то так.

Как карта ляжет, все зависит от формируемого алгоритма оптимизации

Надіслати
Поділитися на інших сайтах

Сначала в селекте должно быть "=", потом "строка%", потом "%строка", потом "%строка%" - как-то так.

 

Как карта ляжет, все зависит от формируемого алгоритма оптимизации

 

Условие "=", ИМХО, избыточно - юзеру вряд ли захочется вбивать имя продукта полностью.

 

Условие "%строка" тоже избыточно - его полностью перекрывает "%строка%".

 

ОДИН select с двумя (тремя???) LIKE? Ну да, тут от расклада карт может многое зависеть.

 

 А вот ДВА относительно простых селекта с одним LIKE в каждом и объединением results в PHP - самое, ИМХО, то!

Надіслати
Поділитися на інших сайтах


Условие "=", ИМХО, избыточно - юзеру вряд ли захочется вбивать имя продукта полностью.

 

Условие "%строка" тоже избыточно - его полностью перекрывает "%строка%".

 

ОДИН select с двумя (тремя???) LIKE? Ну да, тут от расклада карт может многое зависеть.

 

 А вот ДВА относительно простых селекта с одним LIKE в каждом и объединением results в PHP - самое, ИМХО, то!

Все зависит от товаров. Зачастую важны именно детали.

Надіслати
Поділитися на інших сайтах


Согласен. Но ТС не модуль же пишет. Зачем здесь универсальность? 

Ну ему дали полный набор необходимых форматов выборки, подсказали, как его укоротить, при необходимости. А дальше уже сам выберет.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.