Задача следующая:
Есть табличка keys со столбиками:
key | bind
Где key - это ключ, а bind - это так сказать привязанныйkey.
Пример:
key1
key2 key1
key3 key1
key4 key1
key5 key2
key6 key5
Суть в том, что привязка работает следующим образом:
Берем определенный ключ:
Выводится все правильно.
Вопрос:
Как написать функцию, которая будет брать главный ключ - со второго и 3 уровня?
Пример:
Берем key6 вывести должно key1, берем key5, вывести должно key1, берем key2 вывести должно key1.
Более 3 уровней быть не должно, а также не должно уходить выше - имеется ввиду, что если у key1 появится key0, то с key6 не должно прыгнуть выше key1, key5, должен возвращать key1, key2 должно вернуть key1 - последовательность должна сохраниться key0 не должен выводиться.
Не могу написать сам алгоритм, не въеду никак, пожалуйста помогите.
select coalesce(T2.bind, T1.bind, T.bind, T.`key`)
from Table1 T
left join Table1 T1 on T1.`key`=T.bind
left join Table1 T2 on T2.`key`=T1.bind
where T.`key`='key6'
Тест на sqlfiddle.com
Если ни одного вышестоящего ключа не найдено, то выдает искомый ключ. Если это не требуется, а надо получить NULL, то убрать из coalesce T.key.
UPD:
SELECT `k2`.`bind`
AS `k2bind`, `k1`.`bind`
AS `k1bind`, `k`.`bind`
AS `kbind`, `k`.`key`
AS `kkey`
FROM `keys` AS `k`
LEFT JOIN `keys`
AS `k1`
ON `k1`.`key`=`k`.`bind`
LEFT JOIN `keys`
AS `k2`
ON `k2`.`key`=`k1`.`bind`
WHERE `key`='key6'
Сборка персонального компьютера от Artline: умный выбор для современных пользователей