我正在尝试提出一个查询,如果输入是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
如果我在别名中寻找输入就很容易了,但我不知道如何找到输入的别名并且是最长的别名。
答案 0 :(得分:1)
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