我有这张表:
id | businessName| keywords
============================
1 Adam FOX
2 FOX bla bla bla
用户插入一个字符串,我想在 businessName 和 keywords 列中搜索这个字符串。所以我运行这个查询:
SELECT * FROM `business` WHERE `businessName` LIKE '%str%' OR `keywords` LIKE '%str%'
我的问题:
首先,我想获取名称与 str
匹配的企业,然后获取关键字与 str
匹配的企业。
即:用户输入单词FOX
,mysql将返回两个业务(adam和FOX),在这种情况下我希望mysql首先返回FOX(因为它的名称匹配str
) 然后返回 Adam(因为它的关键字匹配 str
)
最佳答案
您可以按基于匹配生成的值进行排序:
SELECT
*
FROM `business`
WHERE
`businessName` LIKE '%str%' OR
`keywords` LIKE '%str%'
ORDER BY
CASE WHEN `businessName` LIKE '%str%' THEN
0
ELSE
1
END
上面的例子很通用,但下面的例子应该也适用于 MySQL,只是按条件排序:
SELECT
*
FROM `business`
WHERE
`businessName` LIKE '%str%' OR
`keywords` LIKE '%str%'
ORDER BY
`businessName` LIKE '%str%' DESC
您需要在 order by 中添加 DESC
,因为匹配 (true) 的排名高于不匹配 (false)。
关于mysql非字母顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354342/