我正在我的网站中使用分页功能开发搜索功能,以搜索产品名称和品牌名称。我正在使用此查询来获取用户的搜索请求:
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%'
我想首先展示品牌名称和产品名称中具有完整“最佳营养”的产品。我将如何实现这一目标?
任何建议都将不胜感激。
答案 0 :(得分:2)
尝试:
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 :(得分:1)
首先我相信name = 'optimum nutrition'
也会返回name LIKE '%optimum%'
。如果您设计正确的查询,这可以工作。但是LIKE
非常慢,应该避免,尤其是数据库很大。我刚刚发现了这个有趣的presentation which used October's Stackoverflow data and did full text searching。我认为这个比较表很有意思:
答案 2 :(得分:0)
我建议你研究一下 Zend Search Lucene,将搜索功能放在您的网页上。
答案 3 :(得分:0)
我建议调查MySQL full text search。这涉及在要搜索的列上添加FULLTEXT
索引,然后使用看起来像这样的查询:
SELECT *
FROM products
WHERE MATCH(name, brand) AGAINST ('optimum')