Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/82: Рейтинг темы: голосов - 82, средняя оценка - 4.63
0 / 0 / 4
Регистрация: 08.05.2012
Сообщений: 27

Категории и подкатегории на одной таблице Mysql

21.05.2012, 21:48. Показов 15372. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте подскажите как можно реализовать категории и подкатегории на одной таблице MYSQL.

И выводилось чтобы в виде дерева с постановкой в выподыющий список.
  1. Первая главная категория
  2. -- Подкатегория 1
  3. -- Подкатегория 2
  4. -- Подкатегория 3
  5. Вторая главная категория
  6. -- Подкатегория 1
  7. -- Подкатегория 2
  8. -- Подкатегория 3

Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2012, 21:48
Ответы с готовыми решениями:

Категории и подкатегории
Всем добрый вечер, помогите решить проблему, немогу вывести подкатегории: $res1 = mysql_query("SELECT * FROM cats WHERE root=$id...

Категории и подкатегории
Доброго времени суток! Объясните пожалуйста как на Битрикс сделать меню всплывающее с такой структурой: Главное -1 -2 -3 --3-1...

Категории и подкатегории
Хочу сделать категории с подкатегориями. Но не могу придумать как различать подкатегории. Приведу пример для ясности. Например...

6
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
22.05.2012, 13:33

Не по теме:

у меня аналогичная проблема щас думаю как сделать!



Добавлено через 2 часа 9 минут
чтот не могу понять!
структура таблицы такая:
id parent_id name
10Нулевая главная категория
21Первая главная категория
31Первая главная категория
40Нулевая главная категория
52Вторая главная категория
62Вторая главная категория

вывожу:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$result = mysql_query("SELECT id, parent_id, name FROM categ ORDER BY parent_id, id");
while ($row = mysql_fetch_row($result)){
         $menu[$row['1']][$row['0']] = $row['2'];
}
echo "<pre>";       
print_r($menu);
echo "</pre>";
 
 foreach ($menu[0] as $CatId => $CatName)
 
        {
                 echo "<li><a href='view.php?id=#'>$CatName</a></li>";
                 foreach ($menu[$CatId] as $ItemId => $ItemName)
                 {
                        echo "<p><ul><li><a href='view_cat.php?cat='>→ $ItemName</a></li></ul></p>";
                 }
        }
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
    [0] => Array
        (
            [1] => Нулевая главная категория
            [4] => Нулевая главная категория
        )
 
    [1] => Array
        (
            [2] => Первая главная категория
            [3] => Первая главная категория
        )
 
    [2] => Array
        (
            [5] => Вторая главная категория
            [6] => Вторая главная категория
чтот не так..

с двумя таблицами делается легко! а вот с одной.....
0
0 / 0 / 4
Регистрация: 08.05.2012
Сообщений: 27
12.06.2012, 11:35  [ТС]
Нет не то
0
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
12.06.2012, 13:40
Цитата Сообщение от okwel Посмотреть сообщение
Нет не то
у есть вариант ток с двумя таблицами!
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
12.06.2012, 13:48
SQL
1
2
3
4
5
6
CREATE TABLE `tree` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `parent` INT NOT NULL ,
  `title` VARCHAR(255) NOT NULL,
  ...
);
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function &LoadTree( $table ){
  // загружаем данные из базы во вспомогательный массив $raw, в котором индексом будут id вершин дерева
  $sqlresult =  mysql_query( 'SELECT * FROM `'.$table.'`' );
  $raw = array();
  while( $item = mysql_fetch_assoc( $sqlresult ) ){
    $item['subitems'] = array();
    $raw[ $item['id'] ] = $item;
    }
  // строим само дерево
  $tree = array();
  foreach( $raw as $id=>&$item )
    if( array_key_exists( $item['parent'], $raw )  )  // если есть родительская вершина в дереве
      $raw[ $item['parent'] ]['subitems'][ $id ] =& $item;
    else // иначе - это вершина верхнего уровня
      $tree[ $id ] =& $item;
  // дерево построенно, возвращаем его из ф-ии
  return $tree;
  }
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function ShowTree( &$tree ){
  echo '<ul>';
  foreach( $tree as &$item ){
    echo '<li>'.$item['title'];
    if( ! empty($item['subitems']) )
      ShowTree( $item['subitems'] );
    echo '</li>';
    }
  echo '</ul>';
  }
 
$tree =& LoadTree( 'table_name' );
...
ShowTree( $tree );
А ещё прочтите про nested sets
2
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
01.12.2012, 09:12
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
echo "<ul class=\"menu\">";
$result_cat = mysql_query("SELECT `id`,`title`,`text`,`sort` FROM categoriesmenu ORDER BY `sort`",$db)or die('Запрос не удался: ' . mysql_error());
while($row_id = mysql_fetch_assoc($result_cat)) 
{
    echo "<li>";
    $res_art = mysql_query("SELECT * FROM subcategory WHERE cat=".$row_id['id']."",$db)or die('Запрос не удался: ' . mysql_error());
    if (mysql_num_rows($res_art) > 0)
{   
    echo "<a href=\"categories.php?id=".$row_id['id']."\" class=\"sidebarmenu\">".$row_id['title']."</a>";  
    echo "<ul>";
        while($row_art = mysql_fetch_assoc($res_art)) 
        {
            echo "<li><a href=\"subcategory.php?cat=".$row_art['id']."\">".$row_art['title']."</a></li>";
        }
    echo "</ul>";
    echo "</li>";
}else{
    echo "<a href=\"categories.php?id=".$row_id['id']."\">".$row_id['title']."</a>";    
    echo "<ul>";
        while($row_art = mysql_fetch_assoc($res_art)) 
        {
            echo "<li><a href=\"subcategory.php?cat=".$row_art['id']."\">".$row_art['title']."</a></li>";
        }
    echo "</ul>";
    echo "</li>";
}
}
echo "</ul>";
?>
0
 Аватар для Алиса Няшина
3 / 3 / 3
Регистрация: 16.04.2013
Сообщений: 34
16.04.2013, 09:36
меня это как-то раз тоже озадачило.
Проще всего сделать категории в одной таблице. нужно создать поле с int значением, в которое при создании родительской категории - не забивать ничего, а при создании дочерной - забивать id родительской категории. Таким образом, при выводе главных категории у тебя будет что-то вроде
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                <a href="">Товары</a>
                <ul>
 
 
<? 
$result = mysql_query("SELECT title,id FROM categories WHERE pod=''"); //вытаскиваем категории где значение pod - пустое
$myrow = mysql_fetch_array($men);
do 
{
printf ("
                    <li><a href='view_cat.php?cat=%s'>%s</a></li>",$myrow['id'],$myrow['title']);
 
}
while ($myrow = mysql_fetch_array($result));
?>
                </ul>
Для вывода дочерных категорий:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    <a href="">Товары</a>
                <ul>
 
 
<? 
$men = mysql_query("SELECT title,id FROM categories WHERE pod='id родительской категории'");
$menli = mysql_fetch_array($men);
do 
{
printf ("
                    <li><a href='view_cat.php?cat=%s'>%s</a></li>",$menli['id'],$menli['title']);
 
}
while ($menli = mysql_fetch_array($men));
?>
                </ul>
Далее через GET отправляешь значение cat и обрабатываешь его принимающим скриптом. Затем выводишь все товары где указан id этой категории.
PHP
1
$result = mysql_query("SELECT * FROM товары WHERE категория='$cat'");
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2013, 09:36
Помогаю со студенческими работами здесь

Категории, подкатегории и тд.
Нашёл статью - https://www.cyberforum.ru/php-beginners/thread519767.html Хотелось бы составить таблицы и вывод - нужна помощь! ...

категории и подкатегории - новое
здравствуйте! я бы хотел доработать один скрипт категории и подкатегории дело в том что этот скрипт работает но хочу сделать так у...

Htaccess (категории и подкатегории)
1. Хотел бы добавить к правилу подкатегории к категориям, например в napitki - sait.ru/italy/napitki/sok, а не sait.ru/italy/sok. 2. Для...

Категории и подкатегории на Wordpress
Добрый вечер! У меня интернет-магазин на вордпрессе(купила готовое решение) и никак не могу понять и решить одну проблему. Эту проблемы я...

Отсортировать подкатегории категории
Здравствуйте. была задача вывести подкатегории родительской категории. задача выполнена, но есть небольшой нюанс. не пойму как вывести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru