我正在尝试提出一个查询,如果输入是id或输入包含与输入开头匹配的最长别名,则返回一行。这是示例数据表以及结果。
表:
id+alias
1 | dept
2 | dept/reception
3 | dept/support
4 | dept/support/server
5 | dept/support/networking
6 |
7 | news
8 | purple
抬头:
input => result
5 => 5
dept => 1
dept/add => 1
purple => 8
dept/support/moo => 3
dept/reception/bldg5/floor7 => 2
如果我要在别名中查找输入,这将很容易,但是我无法弄清楚如何找到与输入一起使用且是最长别名的别名。
最佳答案
SELECT * FROM `tbl`
WHERE `id` = 'INPUT'
OR `alias` = 'INPUT'
OR 'INPUT' LIKE CONCAT(`alias`,'%')
ORDER BY `id` = 'INPUT' DESC,
`alias` = 'INPUT' DESC,
(LENGTH(`alias`) - LENGTH(REPLACE(`alias`, '/', ''))) DESC
LIMIT 0,1
关于mysql - 查询输入的子字符串是字段的一部分的地方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15443884/