Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужна помощь в составлении запроса к базе данных и последующей выдачи в цикле
 
 автор: Sadalsky   (24.01.2012 в 17:08)   письмо автору
 
 

Существуют две таблицы menu и data:

Таблица menu:
id_menu parent_menu title

1 0 Овощи
2 0 Фрукты
3 1 Овощи Русские
4 1 Овощи Буржуйские
5 2 Фрукты Русские
6 2 Фрукты Буржуйские
7 3 Чистые
8 3 Грязные
9 4 Чистые
10 4 Грязные
11 5 Чистые
12 5 Грязные
13 6 Чистые
14 6 Грязные

где id_menu - уникальный индификатор категории, parent_menu - ссылка на родительский элемент,title-название категории

Таблица data:

id_data parent_data title_data
1 7 Картофель Русский Чистый
2 7 Морковь Русский Чистый
3 8 Картофель Русский Грязный
4 8 Морковь Русский Грязный
5 9 Картофель Буржуйский Чистый
6 9 Морковь Буржуйский Чистый
7 10 Картофель Буржуйский Грязный
8 10 Морковь Буржуйский Грязный

где parent_data - ссылка на родительский элемент.

Задача: Существует сайт типа:блог и начинающий сайтостроитель. Слева на странице, как положено, выводится меню в виде дерева, а вот справа выводится контент...При выборе пункта menu происходит передача данных id_menu... и здесь самое непонятное...Как нужно сделать запрос к базе, потом загнать в массив и уже после этого зациклить, при условии что при выборе в таблице menu родительской категории - из таблицы data выводились не только те элементы, которые непосредственно относятся к самой категории, но и из подкатегорий этого родителя(Грубо говоря, на каждом шаге должна существовать выдача...).

Пример: В таблице menu выбираем Овощи Русские(id_menu=3) и из data получаем:

Картофель Русский Чистый(id_data=1)
Морковь Русский Чистый(id_data=2)
Картофель Русский Грязный(id_data=3)
Морковь Русский Грязный(id_data=4)

Заранее премного благодарен всем откликнувшимся!!!

  Ответить  
 
 автор: cheops   (24.01.2012 в 20:37)   письмо автору
 
   для: Sadalsky   (24.01.2012 в 17:08)
 

Правильно ли я понимаю, что data.parent_data = menu.id_menu, а вам нужен menu.parent_menu?

  Ответить  
 
 автор: Sadalsky   (24.01.2012 в 21:22)   письмо автору
 
   для: cheops   (24.01.2012 в 20:37)
 

короче говоря....предложили вот такой кодинг...только я не пойму...как его притянуть...
// $id_ctg - уникальный ID той категории (раздела каталога) для которой 
// мы выводим список все товаров (и в том числе товаров в подкатегориях)
$ctgs = get_subcategories( $id_ctg );
$ctgs[] = $id_ctg;
$ids = implode($ctgs);
$query = "SELECT * FROM `products` WHERE `id_ctg` IN (".$ids.") ORDER BY price";
 
// Получить для текущей категории все подкатегории (всех уровней вложенности)
function get_subcategories( $id )
{
  $q = mysql_query("SELECT `id_ctg` FROM `categories` WHERE `parent`=".$id);
  $r = array();
  while ($row = mysql_fetch_row($q)) {
    $r[] = $row[0];
    $a = get_subcategories( $row[0] );
    for ( $i = 0; $i < count($a); $i++ ) $r[] = $a[$i];
  }
  return $r;

  Ответить  
 
 автор: cheops   (24.01.2012 в 22:48)   письмо автору
 
   для: Sadalsky   (24.01.2012 в 21:22)
 

Нужно подставить свои названия таблиц и полей, именно поэтому и приведен выше вопрос, верно ли то, что написано? Чтобы вам дать в руки запросы с вашими именами, а потом вы оформите их в виде кода, который приведен выше.

  Ответить  
 
 автор: Sadalsky   (24.01.2012 в 23:01)   письмо автору
 
   для: cheops   (24.01.2012 в 22:48)
 

в первой части вопроса вы абсолютно правы, а вот со второй частью вопроса немного не понял...

  Ответить  
 
 автор: Sadalsky   (24.01.2012 в 23:02)   письмо автору
 
   для: cheops   (24.01.2012 в 22:48)
 

parent_data = id_menu - вообще говоря, вот так там просто немного смешалось...

  Ответить  
 
 автор: cheops   (25.01.2012 в 13:04)   письмо автору
 
   для: Sadalsky   (24.01.2012 в 23:02)
 

Допустим выбрана "Морковь" (data.id_data = 8), тогда извлечь идентификатор родителя можно так
SELECT
  menu.parent_menu
FROM
  menu
LEFT JOIN
  data
ON
  data.parent_data = menu.id_menu
WHERE
  data.id_data = 4
Можно использовать этот идентификатор во вложенном запросе, а можно извлечь и подставить в новый запрос, чтобы выбрать подчиненные подкаталоги для данного каталога.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования