







|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
32809
|
|