Вывод меню без класса

Фанат

oncle terrible
Команда форума
не надо мне ничего писать в личку.
меня не интересует структура твоей таблицы. у меня их своих тыщи
я ТЕБЯ спросил, видишь ли ты какое-то отличие корневых записей от всех других.

если тебе показать строку таблицы - ты сможешь сказать, корневая она, или нет?
 

Фанат

oncle terrible
Команда форума
Еслиб догадался, не писал бы на форум. К сожалению я не вижу признаков.
то есть, назначение поля parent_id тебе непонятно?
и отличить строки, у которых есть родитель, от строк, у которых его нет - ты не в состоянии?
Тогда всё плохо
 

novi4ok

Новичок
и parent понятно и prev понятно.
Но по одной и даже нескольким строкам точно сказать кто родитель нельзя.
Что-то крепится к родительскому (parent), что-то по предъидущему (prev). Поэтому и не могу понять логику вывода. Как это спросить SQL`ем.
догадываюсь, что одним запросом не обойтись. Т.е. вначале надо спросить о родителях, а потом о всех зависимых и ещё в этих зависимых проверять, нет ли у них деток. И т.д. Но изначально, как вычленить корневых родителей? Вот в чём вопрос.
 

novi4ok

Новичок
те, которые выводятся первыми. По идее должны иметь привязку к id=0.
 

novi4ok

Новичок
1-й пункт id=0, остальные, первые, по своему id, привязываются к первому пункту. Второстепенные уже к своим родителям, пунктам первого уровня и т.д. А здесь непонятно, что к чему.
 

Фанат

oncle terrible
Команда форума
да при чем здесь id-то? о каком таком id ты вообще говоришь?
 

novi4ok

Новичок
Значит сортируем по parent и prev одновременно. Тогда получим всё меню одним списком. И что?
А как их привести к виду:
<ul>
<li></li>
<li>
<ul>
<li></li>
<li></li>
</ul>
</li>
<li></li>
</ul>
 

Фанат

oncle terrible
Команда форума
господи, да при чем здесь parent и prev одновременно?
ты вообще помнишь, какой вопрос я тебе задал?
как найти корневых родителей.
что ты здесь собрался сортировать?!
 

novi4ok

Новичок
а хз, как их найти.
Уважаемый Фанат, я так понимаю вы не можете что-либо подсказать. Вся беседа, так, для поддержания разговора?
 

Redjik

Джедай-мастер
novi4ok
совсем нет, просто ты дурочка включаешь и говоришь, сделайте за меня... - корневые записи будут те, у которых WHERE parent_id IS NULL
разве это не очевидно?
 

novi4ok

Новичок
корневые записи будут те, у которых WHERE parent_id IS NULL
разве это не очевидно?
Нет, не очевидно.
Говорю же, какие то пункты по parent, а какие-то по prev. Может по таблице будет понятнее. Добавил столбец, где указан уровень пункта.

PHP:
id	caption	alias	parent_id	prev_id	уровень вложения
1	name	alias	NULL	NULL	1 уровень
2	name	alias	1	NULL	2 уровень
3	name	alias	NULL	2	2 уровень
4	name	alias	3	NULL	3 уровень
5	name	alias	NULL	6	3 уровень
6	name	alias	NULL	4	3 уровень
7	name	alias	NULL	5	3 уровень
8	name	alias	NULL	7	3 уровень
9	name	alias	NULL	8	3 уровень
10	name	alias	NULL	9	3 уровень
11	name	alias	NULL	10	3 уровень
12	name	alias	NULL	11	3 уровень
13	name	alias	NULL	12	3 уровень
14	name	alias	NULL	13	3 уровень
15	name	alias	NULL	14	3 уровень
16	name	alias	NULL	15	3 уровень
17	name	alias	NULL	16	3 уровень
18	name	alias	NULL	17	2 уровень
19	name	alias	NULL	3	2 уровень
20	name	alias	NULL	19	2 уровень
21	name	alias	NULL	20	2 уровень
22	name	alias	NULL	21	2 уровень
23	name	alias	NULL	22	2 уровень
24	name	alias	NULL	23	2 уровень
25	name	alias	NULL	24	2 уровень
26	name	alias	NULL	1	1 уровень
27	name	alias	26	NULL	2 уровень
28	name	alias	NULL	27	2 уровень
29	name	alias	NULL	28	2 уровень
30	name	alias	NULL	29	2 уровень
31	name	alias	NULL	30	2 уровень
32	name	alias	NULL	31	2 уровень
33	name	alias	NULL	32	2 уровень
34	name	alias	NULL	33	2 уровень
35	name	alias	NULL	34	2 уровень
 

Lionishy

Новичок
Участники форума не могут догадываться о структуре таблицы. Опиши, как она устроена. Иначе здесь все будут сидеть и гадать...

Хотя, по-моему, тут всё прозрачно. Я работал с такими в коде PLUTO. Хотя тоже могу ошибаться. Лучше ты сам опишешь структуру, а не мы будем играть в Стива Джобса.
 

novi4ok

Новичок
id - понятно
caption - отображаемое имя пункта в меню
alias - имя пункта на латинице, по нему GET`ом выводится нужная страница
parent_id - родительский пункт меню
prev_id - предъидущий пункт меню (для вывода не по алфавиту, принудительная сортировка)



CREATE TABLE IF NOT EXISTS `table_cat` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`caption` varchar(255) NOT NULL,
`alias` varchar(255) DEFAULT NULL,
`parent_id` int(10) DEFAULT NULL,
`prev_id` int(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_table_cat_parent_id_table_cat_id` (`parent_id`),
KEY `FK_table_cat_prev_id_table_cat_id` (`cat_prev_Id`)
) ENGINE=InnoDB AUTO_INCREMENT=147 DEFAULT CHARSET=cp1251;
 

Lionishy

Новичок
Будем играть в Стива Джобса...

Сколько элементов в таблице могут одновременно иметь parent_id <> NULL AND prev_id <> NULL ?
 

novi4ok

Новичок
parent_id <> NULL AND prev_id <> NULL - ни одного, к чему-то они должны принадлежать, либо parent, либо prev.
А вот parent_id = NULL AND prev_id = NULL - только один, самый первый, верхний, от которого начинается отсчёт.
 

Lionishy

Новичок
Вот это надо было пояснять с самого начала. Пока люди это не понимали, они писали заведомо ложные решения.

Сформулируйте как можно более формально то, что хотите получить из базы данных.
 

novi4ok

Новичок
К сожалению, сказать, что конкретно я хочу получить из базы данных, не могу. Одним запросом этого не решить.
Задача слудующая:
1. Вывод полного меню по уровням.
2. Вывод только первых родителей.
3. вывод персональных страниц со ссылками деток первых родителей.

Помощи прошу не в коде и запросах, а в логике. как всё это осуществить. (Хотя кто знает, может и после полного понимания выполнения задачи затык будет)
Какой запрос (на пальцах, словах) и какая обработка в коде для того чтобы выделить 1-й уровень, второй, третий и т.д.

Писать за меня ничего не надо. Только логика.
 
Сверху