0

我正在尝试提出一个查询,如果输入是 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

如果我正在寻找别名中的输入,那将很容易,但我不知道如何找到与输入一起并且是最长别名的别名。

4

1 回答 1

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
于 2013-03-16T00:04:38.773 回答