SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.04.2008 13:07:48

Zenon
Участник
Зарегистрирован: 07.04.2008
Сообщений: 4

Запрос на выборку значения вышестоящей ветки

Помогите с решением проблемы
Есть таблица примерно такого содержания

id parent Name Value
---------------------------
1 0 Name1 100
2 1 Name2 null
3 2 Name3 40
4 2 Name4 null

необходимо чтобы информация выводилась в следующем виде

Name Value
--------------
Name1 100
Name2 100
Name3 40
Name4 100

т.е. если Value(значение) не введено, то берется значение вышестоящей (родительской) ветки

Подскажите пожалуйста решение...

Неактивен

 

#2 15.04.2008 18:24:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Запрос на выборку значения вышестоящей ветки

Используйте IF и JOIN:

Код:

SELECT t1.Name, IF(t1.Value, t1.Value, t2.Value)
  FROM tbl t1 LEFT JOIN tbl t2 ON t2.id = t1.parent;

Неактивен

 

#3 16.04.2008 09:27:56

Zenon
Участник
Зарегистрирован: 07.04.2008
Сообщений: 4

Re: Запрос на выборку значения вышестоящей ветки

Как все просто, когда объяснят. Про использование IF даже мысли не возникало. Спасибо.
Буду всем рекомендовать Ваш форум.

Неактивен

 

#4 16.04.2008 12:14:48

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Запрос на выборку значения вышестоящей ветки

rgbeast написал:

Используйте IF и JOIN:

Код:

SELECT t1.Name, IF(t1.Value, t1.Value, t2.Value)
  FROM tbl t1 LEFT JOIN tbl t2 ON t2.id = t1.parent;

а есть решение для неопределенного количества уровней... т.е. нет значения - берем у родителя, нет у него - берем у родителя-родителя и тд?

Неактивен

 

#5 16.04.2008 12:26:19

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Запрос на выборку значения вышестоящей ветки

Насколько я понимаю, в один запрос этого сделать нельзя.
Как вариант - сделать в таблице дополнительный столбец, где хранить нужное значение. Сами понимаете, получается некоторое дублирование данных, но зато будет быстрее.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson