在网站上使用分页搜索功能

时间:2011-07-13 08:27:47

标签: php mysql search

我正在我的网站中使用分页功能开发搜索功能,以搜索产品名称和品牌名称。我正在使用此查询来获取用户的搜索请求:

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 个答案:

答案 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。我认为这个比较表很有意思:

enter image description here

答案 2 :(得分:0)

我建议你研究一下 Zend Search Lucene,将搜索功能放在您的网页上。

答案 3 :(得分:0)

我建议调查MySQL full text search。这涉及在要搜索的列上添加FULLTEXT索引,然后使用看起来像这样的查询:

SELECT * 
FROM products
WHERE MATCH(name, brand) AGAINST ('optimum')