【发布时间】:2014-04-28 15:53:30
【问题描述】:
我需要在以下条件下搜索 MySQL 数据库:
1) 如果找到关键字完全匹配,则返回行数和完全匹配的结果。
2) 如果没有找到完全匹配,则返回部分匹配的行数和结果。
例如,如果关键字是 cake,并且表中有以下行,则搜索应该只返回第 1 行和第 5 行。
1| cake
2| pancake
3| cupcake
4| fruitcake
5| cake
6| pie
但是,如果仅存在以下行,则搜索应仅返回第 2-4 行。
2| pancake
3| cupcake
4| fruitcake
6| pie
在两个查询中这样做很简单,例如:
SELECT SQL_CALC_FOUND_ROWS fields FROM table WHERE word = `cake`
//PHP checks for number of rows, if 0, do second query
SELECT SQL_CALC_FOUND_ROWS fields FROM table WHERE word LIKE '%cake%'
问题:为了减少访问数据库的次数,有没有办法在单个查询中做到这一点?
我能想出的最佳解决方案是通过 OR 进行匹配,使用 ORDER BY 来支持精确匹配。但是,如果找到完全匹配,则要切断部分匹配需要遍历结果,如果完全匹配返回 2,000 个结果并且部分匹配返回 5,000 个以上,这是不可行的,但我只想显示前 25 个,同时仍然显示2,000 个计数。
【问题讨论】:
标签: mysql