Делимся секретами создания сайтов

Категории, подкатегории и вывод данных из БД

привет всем... нужна помощь в выводе данных из бд в php... Суть такая. У меня сайт разделяется на категории, в каждой категории есть подкатегория.
Например категория Фотошоп, а в ней подкатегории Кисти, Шрифты, Стили, Градиенты.
Конечный результат таблицы должен выглядеть вот так:
-------------------------------------------------
<table width="200" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top"><a href="photoshop.php"><img src="images/photoshop.gif" border="0" alt="Photoshop, кисти, шрифты, стили, Градиенты" /></a></td>
</tr>
<tr>
<td>
<div id="coolmenu">
<a href="photoshop.php?rub=1">КИСТИ</a>
<a href="photoshop.php?rub=2">ШРИФТЫ</a>
<a href="photoshop.php?rub=3">СТИЛИ</a>
<a href="photoshop.php?rub=4">ГРАДИЕНТЫ</a>
</div>
</td>
</tr>
</table>
--------------------------------------------------
Я создал таблицу в бд "categories" из 4 полейid - int(11), img varchar(255), alt varchar(255), link varchar(255), где вводятся данные по категориям сайта.
Потом также создал таблицу rub, где 3 поля idint(2), title varchar(255), cat int(2). Где должны хранитьсяданные какая подкатегория к какой категории принадлежит.
Также создал таблицу data? где состоят все данные подкатегорий, из 10 полей:
id int(5)- идентификатор
rubint(1) - номер принадлежности к категории.
meta_d varchar(255) - описание
meta_kvarchar(255) - ключевые слова
description text - Краткое описание в заметке
view int(7) - количество просмотров
author varchar(100) - автор
date varchar(20) - дата
mini- мини-изображение
title - Название

Чтобы было с чем работать ввел несколько данных.
Например, в таблицу "categories" ввел категории Оформление, Фотошоп, Форумы. А в таблицу "rub" ввел все подкатегории с различными полями cat.
C базой данных вроде закончил и все должно быть вроде правильно.

Перехожу к коду php. Пишу :

-----------------------------------------------
<?
$r = mysql_query("SELECT * FROM categories",$db);

if (!$r)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

if (mysql_num_rows($r) > 0)

{
$myrow2 = mysql_fetch_array($r);

do
{
printf ("

<table width="200" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top"><a href="%s"><img src="%s" border="0" alt="%s" /></a></td>
</tr>
<tr>
<td>

<div id="coolmenu">
----------------место где должны выводится подкатегории--------------
<a href="photoshop.php?rub=1">КИСТИ</a>
<a href="photoshop.php?rub=2">ШРИФТЫ</a>
<a href="photoshop.php?rub=3">СТИЛИ</a>
<a href="photoshop.php?rub=4">ГРАДИЕНТЫ</a>
----------------место где должны выводится подкатегории--------------
</div>
</td>
</tr>
</table>

",$myrow2["link"],$myrow2["img"],$myrow2["alt"]);

}
while ($myrow2 = mysql_fetch_array($r));

}

else

Ответы: 5 → “Категории, подкатегории и вывод данных из БД”

  1. Павел Филиппов Ответить

    {
    echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
    exit();
    }

    ?>

    ————————————————–

    Вывев категории, я начал задумываться как вывести подкатегории, и тут!!! собственно я и зпутался. Я пытался по всякому, но ничего не получалось. Знаю, что нужно поключиться к следующей таблице произвести выборку, чтобы каждая подкатегория выводилась под свою категорию, а в последующем ввела ссылкой на страницу с содержимым. Но у меня ничего не получается. У кого была такая проблема, или просто кто знает ответ, то помогите плиз. Так как бошка у мня запуталась вообще!!!

  2. Александр Сердюк Ответить

    пересмотри структуру дерева )) ну либо так:
    <?php

    $q = "SELECT * FROM `categories`;";
    $res = mysql_query($q);
    while ($f_res = mysql_fetch_assoc($res))
    {
    $q = "SELECT * FROM `rub` WHERE `cat` = ".$f_res['id'].";";
    $res2 = mysql_query($q);
    $sub_list = array();
    while ($f_res2 = mysql_fetch_assoc($res2))
    {
    $sub_list[] = $f_res2;
    }
    $categories[$f_res['id']] = $f_res;
    if (count($sub_list)>0)
    $categories[$f_res['id']]['sub'] = $sub_list;
    unset($sub_list);
    }
    //для понимания что получилось:
    print_r($categories);
    ?>

    ну и сформировать отсюда ссылку с идентификатором для выборки из таблы `data` помоему вообще элементарно.

    А вообще найди в обсуждениях тему про деревья, там много инфы на этот счет со ссылками.

  3. Павел Филиппов Ответить

    Уже разобрался, сделал все через условие if else

  4. Александр Сердюк Ответить

    О.о покажи))))

  5. Алексей Макаров Ответить

    Надо делать по технологии "вложенных множеств"(nested sets)
    Так вложенных категорий больше можно сделать и быстрее работать будет. =)

Ответить