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

10-11 03:05