Функциональность поиска с нумерацией страниц на сайте - PullRequest
1 голос
/ 13 июля 2011

Я разрабатываю поисковую функцию с нумерацией страниц на моем сайте для поиска названия продукта и бренда. Я использую этот запрос, чтобы получить поисковый запрос пользователя:

SELECT *
from products
WHERE name = 'optimum nutrition'
    OR brand = 'optimum nutrition' 
    OR name LIKE '%optimum%' 
    OR brand LIKE '%optimum%' 
    OR name LIKE '%nutrition%' 
    OR brand LIKE '%nutrition%'

Я хотел бы сначала показать продукты, которые имеют полное «оптимальное питание», либо в названии бренда, либо в названии продукта. Как мне это сделать?

Любое предложение будет с благодарностью.

Ответы [ 4 ]

2 голосов
/ 13 июля 2011

Попробуйте:

SELECT *, 
CASE WHEN (name = 'optimum nutrition' OR brand = 'optimum nutrition') THEN 1 ELSE 0 END AS full_match,
CASE WHEN (name LIKE '%optimum%' OR brand LIKE '%optimum%' OR name LIKE '%nutrition%' OR brand LIKE '%nutrition%') THEN 1 ELSE 0 END AS half_match
FROM products 
WHERE (name = 'optimum nutrition' OR brand = 'optimum nutrition')
OR (name LIKE '%optimum%' OR brand LIKE '%optimum%' OR name LIKE '%nutrition%' OR brand LIKE '%nutrition%')
ORDER BY full_match, half_match
1 голос
/ 13 июля 2011

Сначала я верю, что name = 'optimum nutrition' также будет возвращено name LIKE '%optimum%'. это может работать, если вы создаете правильный запрос. Но LIKE очень медленный и его следует избегать, особенно большая база данных. Я только что нашел эту интересную презентацию , в которой использовались данные Stackoverflow за октябрь и был выполнен полнотекстовый поиск . Мне кажется, этот лист сравнения интересен:

enter image description here

0 голосов
/ 13 июля 2011

Я бы предложил посмотреть Полнотекстовый поиск MySQL . Это включает добавление индекса FULLTEXT к столбцам, которые вы хотите найти, и затем использование запроса, который будет выглядеть примерно так:

SELECT * 
FROM products
WHERE MATCH(name, brand) AGAINST ('optimum') 
0 голосов
/ 13 июля 2011

Я предлагаю вам заглянуть в Zend Search Lucene , чтобы добавить функцию поиска на вашу страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...