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

Как вывести информацию из БД по категориям?

03.01.2012, 19:02. Показов 6858. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Я не могу понять как мне сделать следующее.

Я вывожу информацию из базы данных посредством следующего кода

PHP
1
2
3
4
5
<?php
$res = mysql_query("SELECT * FROM `terms`");
while($row = mysql_fetch_assoc($res)){
echo "<li><a href='mytest2.php?id_cat={$row['term_id']}'>{$row['name']}</a></li>";
}?>
он выводит из таблицы terms имена всех категорий и подкатегорий, на которые разделена моя информация, единым списком, а еще извлекает ид. номер каждой из них.

В базе данных есть еще одна таблица, называется taxonomy, которая содержит т.н. таксономию, то есть определяет, к какой категории относится та или иная подкатегория. Она содержит две колонки: одна - с номерами подкатегорий, а другая колонка - с номерами категорий, которым соответствуют те или иные подкатегории. Все номера соответствуют номерам первой таблицы terms.

Теперь, как мне с помощью таблицы taxonomy выводить списки подкатегорий из первой таблицы terms не сплошным списком все подряд, а только по определенной категории, напр. только все подкатегории категории 1 или 2 и т.д.? Спасибо.

Для наглядности приведу примерную структуру таблиц. Таблица terms состоит из колонок:
ид.номер(term_id) название категории/подкатегории(name)
11 Авто
12 Мото
13 Вело
24 Авиа
и т.д.
Таблица taxonomy состоит из колонок:
ид.номер подкатегории(term_id) ид.номер категории
11 1
12 1
13 1
24 2
и т.д.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2012, 19:02
Ответы с готовыми решениями:

Как в php вывести ссылку на статьи по определенным категориям?
Есть учебный блог с разными статьями по категориям. Вот код вывода статей из одной категории categorie_id = 2 на странице &lt;?php ...

Как вывести прайс по категориям?
Уважаемые участники,данного форума прощу мне помочь решить следующую задачу.Есть 1с 7.7 торговля 9.2. В ней есть прайс.Кто знает подскажите...

Как вывести информацию?
Есть главная страница сайта: &lt;?php include&quot;bd.php&quot;; $query = mysql_query(&quot;SELECT * FROM mysite&quot;); $count = mysql_num_rows($query); ...

17
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
03.01.2012, 20:03
Выложите, пожалуйста, полную структуру таблиц terms и taxonomy, для более развернутого ответа.
0
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
03.01.2012, 20:09  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
Выложите, пожалуйста, полную структуру таблиц terms и taxonomy, для более развернутого ответа.
А как, скинуть дамп?
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
03.01.2012, 20:12
Дамп не обязательно делать, просто перечислите, какие точно столбцы присутствуют в обоих таблицах.
0
65 / 65 / 6
Регистрация: 22.09.2010
Сообщений: 182
03.01.2012, 20:23
PHP
1
2
$cat = (int)$_GET['cat_id'];
$res = mysql_query("SELECT t1.* FROM `terms` t1 INNER JOIN `taxonomy` t2 USING (term_id) WHERE t2.term_id={$cat}");
Или вы хотите просто разбить по блокам категории?
0
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
03.01.2012, 20:39  [ТС]
В сущности это стандартная база вордпресса, использованная мной в своих целях.
Первая terms, колонки:
term_id(номер подкат./кат.) || name(наимен.) || slug(ярлык, урл) || term_group(неизвестно, одни нули)
Вторая taxonomy:
term_taxonomy_id(номер подкат./кат.) || term_id(тоже) || taxonomy(неизв.) || description(пусто) || parent(номер кат.) || count(одни нули)

Добавлено через 9 минут
Цитата Сообщение от Great-Antique Посмотреть сообщение
PHP
1
2
$cat = (int)$_GET['cat_id'];
$res = mysql_query("SELECT t1.* FROM `terms` t1 INNER JOIN `taxonomy` t2 USING (term_id) WHERE t2.term_id={$cat}");
Или вы хотите просто разбить по блокам категории?
Вообще, мне нужно выводить списком ссылок категории и по каждой категории по клику выводить список соотв. подкатегорий. Выводить списки сведений по каждой подкатегории я уже научился, теперь вот ломаю голову с этим
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
03.01.2012, 20:45
Если я правильно понимаю, то
term_taxonomy_id(уникальный номер записи в таблице) || term_id(id родительской категории) || taxonomy(неизв.) || description(пусто) || parent(id подкатегории) || count(одни нули)

запрос будет выглядеть следующим образом:
SQL
1
2
3
SELECT TER.`term_id`, TER.`name` FROM `terms` TER
LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`parent`
WHERE TAX.`term_id`=1
0
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
03.01.2012, 20:50  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
Если я правильно понимаю, то
term_taxonomy_id(уникальный номер записи в таблице) || term_id(id родительской категории) || taxonomy(неизв.) || description(пусто) || parent(id подкатегории) || count(одни нули)

запрос будет выглядеть следующим образом:
SQL
1
2
3
SELECT TER.`term_id`, TER.`name` FROM `terms` TER
LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`parent`
WHERE TAX.`term_id`=1
Нет term_id - ид подкатегории, а parent - ид категории, один номер соответствует сразу нескольким term_id. Это совершенно точно.
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
03.01.2012, 20:56
Точно, parent - родитель. Чет тупанул... сорри
Тогда попробуйте так.

SQL
1
2
3
SELECT TER.`term_id`, TER.`name` FROM `terms` TER
LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`term_id`
WHERE TAX.`parent`=1
Добавлено через 2 минуты
Естественно часть запроса
SQL
1
WHERE TAX.`parent`=1
будет динамической, меняйте номер TAX.`parent` в соответствии с категорией, которую собираетесь отобразить
0
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
03.01.2012, 21:04  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
Точно, parent - родитель. Чет тупанул... сорри
Тогда попробуйте так.

SQL
1
2
3
SELECT TER.`term_id`, TER.`name` FROM `terms` TER
LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`term_id`
WHERE TAX.`parent`=1
Добавлено через 2 минуты
Естественно часть запроса
SQL
1
WHERE TAX.`parent`=1
будет динамической, меняйте номер TAX.`parent` в соответствии с категорией, которую собираетесь отобразить
Прокомментируйте, пожалуйста, если не трудно.
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
03.01.2012, 21:18
Я, надеюсь, у Вас все работает, потому как, бывает сложно в уме составлять запросы и не проверять их, могу и ошибиться

В этом запросе мы соединяем две таблицы.
В первой строке идет объявление тех данных которые мы хотим получить в результате запроса
Во второй строке идет условие соединение двух таблиц, то есть мы указываем связи между полем terms.`term_id` и taxonomy.`term_id`
В третьей строке запроса указываем условие отбора данных из таблицы taxonomy.

Попросту сказав, мы по id'шнику подкатегории, указанному в поле taxonomy.`term_id` выбираем данные из таблицы terms.
0
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
03.01.2012, 21:21  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
Я, надеюсь, у Вас все работает, потому как, бывает сложно в уме составлять запросы и не проверять их, могу и ошибиться

В этом запросе мы соединяем две таблицы.
В первой строке идет объявление тех данных которые мы хотим получить в результате запроса
Во второй строке идет условие соединение двух таблиц, то есть мы указываем связи между полем terms.`term_id` и taxonomy.`term_id`
В третьей строке запроса указываем условие отбора данных из таблицы taxonomy.

Попросту сказав, мы по id'шнику подкатегории, указанному в поле taxonomy.`term_id` выбираем данные из таблицы terms.
Сейчас буду пробовать, это, как я понимаю, вставляется в скобки в запрос $res = mysql_query(...);?
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
03.01.2012, 21:30
PHP
1
2
3
4
$res = mysql_query("SELECT TER.`term_id`, TER.`name` FROM `terms` TER LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`term_id` WHERE TAX.`parent`=1");
while($row = mysql_fetch_assoc($res)){
echo "<li><a href='mytest2.php?id_cat={$row['term_id']}'>{$row['name']}</a></li>";
}
1
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
03.01.2012, 21:48  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
PHP
1
2
3
4
$res = mysql_query("SELECT TER.`term_id`, TER.`name` FROM `terms` TER LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`term_id` WHERE TAX.`parent`=1");
while($row = mysql_fetch_assoc($res)){
echo "<li><a href='mytest2.php?id_cat={$row['term_id']}'>{$row['name']}</a></li>";
}
Сработало! Благодарю!

Теперь бы еще список всех категорий также в виде ссылок вывести и моя идея реализована, а?..
0
65 / 65 / 6
Регистрация: 22.09.2010
Сообщений: 182
03.01.2012, 22:41
Вам надо список только тех категорий, у которых нету parent?
0
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
04.01.2012, 08:42  [ТС]
Цитата Сообщение от Great-Antique Посмотреть сообщение
Вам надо список только тех категорий, у которых нету parent?
Да, точнее у которых в таблице taxonomy parent = 0
0
65 / 65 / 6
Регистрация: 22.09.2010
Сообщений: 182
04.01.2012, 13:07
PHP
1
2
3
4
5
$id_cat = (isset($_GET['id_cat']) && (int)$_GET['id_cat']>0) ? (int)$_GET['id_cat'] : 0;
$res = mysql_query("SELECT TER.`term_id`, TER.`name` FROM `terms` TER LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`term_id` WHERE TAX.`parent`={$id_cat}");
while($row = mysql_fetch_assoc($res)){
echo "<li><a href='mytest2.php?id_cat={$row['term_id']}'>{$row['name']}</a></li>";
}
1
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 10
04.01.2012, 19:57  [ТС]
Чтобы выводить список категорий, я решил сделать следующим образом. Для вывода списка категорий, в коде
PHP
1
2
3
$res = mysql_query("SELECT TER.`term_id`, TER.`name` FROM `wp_terms` TER LEFT JOIN `wp_term_taxonomy` TAX ON TER.`term_id` = TAX.`term_id` WHERE TAX.`parent`=0");
            while($row = mysql_fetch_assoc($res)){
                echo "<li><a href='mytest1.php?id_cat={$row['term_id']}'>{$row['name']}</a></li>";
я просто поставил parent = 0. Вывело категории. Заодно я собрал в GET-параметр сведения о term_id категорий.

Далее, чтобы по клику на категорию выводить списки соотв. подкатегорий, я поставил такой код
PHP
1
2
3
4
5
6
if(isset($_GET['id_cat'])){
            $id_cat = (int)$_GET['id_cat'];
            $res = mysql_query("SELECT TER.`term_id`, TER.`name` FROM `wp_terms` TER LEFT JOIN `wp_term_taxonomy` TAX ON TER.`term_id` = TAX.`term_id` WHERE TAX.`parent`= $id_cat");
            while($row = mysql_fetch_assoc($res)){
                echo "<li><a href='mytest2.php?id_subcat={$row['term_id']}'>{$row['name']}</a></li>";
            }
где parent по идее должен получать значения переменной $id_cat, но ничего не выводит! Подскажите, что я сделал неправильно?

Добавлено через 3 часа 41 минуту
Цитата Сообщение от Great-Antique Посмотреть сообщение
PHP
1
2
3
4
5
$id_cat = (isset($_GET['id_cat']) && (int)$_GET['id_cat']>0) ? (int)$_GET['id_cat'] : 0;
$res = mysql_query("SELECT TER.`term_id`, TER.`name` FROM `terms` TER LEFT JOIN `taxonomy` TAX ON TER.`term_id` = TAX.`term_id` WHERE TAX.`parent`={$id_cat}");
while($row = mysql_fetch_assoc($res)){
echo "<li><a href='mytest2.php?id_cat={$row['term_id']}'>{$row['name']}</a></li>";
}
Спасибо, выводит список категорий, только по ссылкам на категории нужно чтобы выводило списки подкатегорий...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2012, 19:57
Помогаю со студенческими работами здесь

как вывести информацию из бд
есть блок в нём 3 блока как вывести информацию в каждом блоке...и что бы эти 3 блока дублировались при добавлении информации в базу данных

Как вывести информацию из БД в <iframe>?
Доброго времени суток, господа! Есть база, информацию из которой нужно выводить в динамический &lt;iframe&gt;, есть загрузчик файлов,...

Как правильно вывести информацию из бд?
Здравствуйте! Есть таблица с примерно такой структурой: id, folder, img, url Нужно вывести эту информацию в таком виде: folder 1...

Как вывести информацию в консоль
Делаю проект с использованием WinApi. Для отладки программы в C# выводил нужные данные с помощью Console. Как тут сделать такой вывод?...

Как вывести информацию перечислением?
Здравствуйте! В ходе выполнения, программа выводит из отсортированных данных лишь 1 элемент(самый последний). Как сделать так, чтоб...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru