Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
запрос никак не получается... (Вячеслав) 15/01/2008 - 17:14:47
      Re: запрос никак не получается... (Сергей) 15/01/2008 - 18:44:48
      Re: запрос никак не получается... (vi.k) 16/01/2008 - 03:04:16
      Re: запрос никак не получается... (Вячеслав) 17/01/2008 - 13:45:12
      Re: запрос никак не получается... (vi.k) 19/01/2008 - 11:31:27

> Original message text:
> From: Вячеслав - 15/01/2008 - 17:14:47
> Subject:запрос никак не получается...
> -----------------
> Добрый день..
> у меня на сайте сделана след. структура в базе данных каталога..
>
> есть 2 поля -> categoryID parent (остальные поля не пишу..)
>
> 1 запись categoryID=22 parent=0
> 2 запись categoryID=43 parent=22
> 3 запись categoryID=343 parent=43
> 4 запись categoryID=588 parent=343
>
> т.е. для четвертой записи подкатегория равна 588, сама она входит в подкатегорию 343, а та в 43 и т.д.
> перебирая это в цикле, можно получить родительскую директорию, дойти до самого верха...и наоборот зная родительскую можно например выбрать все товары которые лежат под ней и ниже по ее подддиректориями..
>
> Вопрос как написать запрос в мускул который зная номер поддиректории найдет ее родительскую, т.е. самую верхнюю..
> для данного примера я хочу найти categoryID=22 для categoryID=588
> Спасибо...
>


From: vi.k - 16/01/2008 - 03:04:16
Subject:запрос никак не получается...
-----------------
Вопрос уже появлялся не так давно. Одним запросом, как вам уже сказали, нельзя. Используйте хранимую функцию - эту или напишите свою:

DELIMITER $$

DROP FUNCTION IF EXISTS `get_ancestry` $$
CREATE FUNCTION `get_ancestry`(id INT UNSIGNED) RETURNS int(11)
BEGIN
DECLARE p_id INT UNSIGNED;

# SET p_id = (...) используется вместо SELECT ... INTO p_id ... потому что во втором случае,
# при отсутствии данных, MySQL генерирует warning, а в первом случае - нет.
SET p_id = (SELECT DISTINCT `parent_id` FROM `items` WHERE `item_id`=id);

# Сравнение с 0 равносильно сравнению с NULL
WHILE p_id != 0 DO
SET id = p_id;
SET p_id=(SELECT DISTINCT `parent_id` FROM `items` WHERE `item_id`=id);
END WHILE;

# Если предок отсутствует в таблице (сбой?), возвращаем NULL
RETURN IF(p_id IS NULL, NULL, id);

END $$

DELIMITER ;


Возвращает идентификатор самого верхнего предка для любого потомка, для самого верхнего предка - самого себя.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32809



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |