|
|
|
| Вот есть одна таблица, например, cats.
В ней есть поле: cat. В этом поле указывается id категории из таблицы cats.
Т.е. любая категория может вдруг стать подкатегорией.
Мне нужно создать массив, что-то вроде того:
Категория
Подкатегория
Подкатегория
Подкатегория
Подподкатегория
Подподкатегория
Подкатегория
Категория
Подкатегория
Подкатегория
Подкатегория
Подподкатегория
Подкатегория
Подкатегория
Категория
Подкатегория
|
Короче мне нужно это для того, чтобы сделать вывод категорий на сайте, как на этом форуме сообщения. Деревом. Помогите, а. Не знаю как сделать. Спасибо. | |
|
|
|
|
|
|
|
для: Maxam
(02.03.2011 в 00:20)
| | Для этого обычно используется рекурсивная функция, что-то вроде
<?php
function get_catalog($id = 0, $intent = ' ')
{
$id = intval($id);
$query = "SELECT * FROM cats
WHERE cat = $id
ORDER BY pos";
$cat = mysql_query($query);
if(!cat) exit("Ошибка извлечения разделов");
if(mysql_num_rows($cat))
{
while($catalog = mysql_fetch_array($cat))
{
if(!$id) echo $catalog['name'];
else echo $intent.$catalog['name'];
get_catalog($catalog['id'], "$intent ");
}
}
}
get_catalog();
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(02.03.2011 в 00:32)
| | Щас же попробую. | |
|
|
|
|
|
|
|
для: cheops
(02.03.2011 в 00:32)
| |
Fatal error: Call to undefined function sql_fetch()
|
| |
|
|
|
|
|
|
|
для: Maxam
(02.03.2011 в 00:52)
| | Заменил на mysql_fetch_array, вроде работает. Спасибо.
Буду проверять и экспериментировать. | |
|
|
|
|
|
|
|
для: Maxam
(02.03.2011 в 00:52)
| | Да, тоже заметил (правил с библиотечной функции), возьмите код по-новой (эта ошибка исправлена). | |
|
|
|
|
|
|
|
для: cheops
(02.03.2011 в 00:54)
| | Да, да. Уже исправил. Уже работает. Очень вам благодарен! | |
|
|
|
|
|
|
|
для: cheops
(02.03.2011 в 00:32)
| | А можно вопрос глупый? Почему она называется рекурсивной? :) | |
|
|
|
|
|
|
|
для: Maxam
(02.03.2011 в 02:45)
| | Потому что в ней есть рекурсия, т.е. вызов самой себя. | |
|
|
|
|
|
|
|
для: cheops
(02.03.2011 в 00:32)
| | тут запросы в цикле а у меня выбирались все значения а потом сортировались в нужном порядке | |
|
|
|
|
|
|
|
для: Красная_шляпа
(02.03.2011 в 13:26)
| | В смысле? | |
|
|
|
|
|
|
|
для: cheops
(02.03.2011 в 13:34)
| | рекурсивная выборка из базы | |
|
|
|
|
|
|
|
для: Красная_шляпа
(02.03.2011 в 13:26)
| | А если у меня база и в ней 500.000.000 записей? Выбрать всё в массив и сортировать массив - не накладно ли? | |
|
|
|
|
|
|
|
для: mihdan
(02.03.2011 в 14:24)
| | Если у Вас такая база, и оновным запросом над деревом является SELECT, а не INSERT/DELETE/UPDATE, то Вы предпочтете другую схему хранения дерева. Nested Sets , вероятно. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2011 в 14:41)
| | Что значит "вид хранения дерева"? | |
|
|
|
|
|
|
|
для: Maxam
(02.03.2011 в 19:32)
| | Про вид вроде ничего не говорил.
Существует несколько методик представления иерархии данных с помощью SQL-таблицы.
Та, которую упомянули Вы - списки смежности - Adjacency Lists - не единственная.
Другая весьма популярная методика, ориентированная на слегка другие частые запросы, это - вложенные подмножества - nested sets .
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2011 в 19:44)
| | зачем ссылки давать на творения псевдопрограммистов, когда есть хорошие книжки по алгоритмам | |
|
|
|
|
|
|
|
для: Красная_шляпа
(02.03.2011 в 20:38)
| | книжки != ссылки
я ни на одно конкретное творение ссылок не давал.
Не то что бы я долго искал, но представление о материале - при желании - получить можно.
Если у Вас есть на примете ссылка на методический материал получше качеством - показывайте. | |
|
|
|
|
|
|
|
для: mihdan
(02.03.2011 в 14:24)
| | 500 млн записей :) | |
|
|
|