2013-03-15 28 views
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 

如果我一直在尋找的別名中輸入這將是很容易,但我不能圖如何找到使用輸入並且是最長別名的別名。

回答

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 
相關問題