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 に答える