Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

PHP+MySQL: Вывод списка статей при сложном запросе. Как?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> PHP+MySQL: Вывод списка статей при сложном запросе. Как?
Имя
Сообщение << Старые топики   Новые топики >>
PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:19:45.896666   
Zazzool

Сообщений: 3
Оценки: 0
Присоединился: 2004-03-23 10:33:18
Господа, имеется задача, примитивная для опытных php-кодеров, но я уже сломал голову над ней. Помогите, пожалуйста.
Итак, вводные данные. Условно в базе MySQL имеется 4 таблицы:
1. "Статьи" с полями n_id, name
2. "Разделы" с полями r_id, name
3. "Статьи_разделы" с полями n_id, r_id (таблица хранит данные о соответствии статьи и раздела, к которому эта статья относится)
4. "Иерархия_разделов" с полями r_id, parent_id (таблица описывает иерархию разделов)
Можно абстрагироваться от названия таблица "Иерархия _разделов". Скажем, это таблица, хранящая в себе некий критерий отбора разделов.

Теперь вопрос.
Нужно вывести на экран следующие данные:
quote:


Имя_раздела_1
Все статьи, относящиеся к этому разделу.

Имя_раздела_2
Все статьи, относящиеся к этому разделу.


Имя_раздела_n
Все статьи, относящиеся к этому разделу.


И так нужно вывести все разделы, соответствущие определенному значению поля Иерархия_разделов.parent_id.
Как это сделать, а? Желательно самым коротким и простым путем. У меня знаний на это не хватает.

 
Мои мысли-наброски:
Можно ли результат запроса в БД поместить в массив, а потом этот массив использовать в следующем запросе. Т.е. я сначала получаю список разделов, соответствущих определенному параметру. Затем помещаю полученный список в массив. Далее (видимо с помощью цикла) беру по одному разделу из массива и получаю для него список статей. Вывожу на экран. Беру следующий раздел из массива и для него тоже получаю список статей. И так для всех разделов из массива. Меня интересует логика построения такой процедуры, да и синтаксис тоже.
Post #: 1
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:37:44.520000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Лично я бы начал с переделки структуры БД.
4-я таблица лишняя.
3-я таблица нужна только в том случае, если одна статья может относится к разным разделам
Post #: 2
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:38:02.756666   
j0ker_

Сообщений: 609
Оценки: 0
Присоединился: 2005-03-07 15:09:25
Как сделать массив:

<?php
$result = mysql_query("SELECT id FROM table_name");
while ($row = mysql_fetch_row($result)){
}
?>

$row - это массив с id
Post #: 3
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:46:17.693333   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
А если появится ещё одна характеристика, например, описание раздела - ты ещё одну таблицу создашь?
Достаточно две таблицы:

1. "Статьи"
n_id
r_id
name
2. "Разделы"
r_id
parent_id
name

Алгоритм получения статей для раздела в принципе верный.
Post #: 4
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:46:31.256666   
Zazzool

Сообщений: 3
Оценки: 0
Присоединился: 2004-03-23 10:33:18
Хе, если бы была возможность переделки БД, то и вопрос бы не встал ))) Но такой возможности нету, вот и приходится выверчиваться.
 
2j0ker_: Пасиб. А как теперь массив скормить другому запросу?

Post #: 5
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:51:16.396666   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Ну и не вопрос. Все делается одним SQL запросом
Post #: 6
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:55:23.740000   
j0ker_

Сообщений: 609
Оценки: 0
Присоединился: 2005-03-07 15:09:25
quote:

ORIGINAL: Zazzool
2j0ker_: Пасиб. А как теперь массив скормить другому запросу?


Можно в том же цикле
<?php
$result = mysql_query("SELECT id FROM table_name");
while ($row = mysql_fetch_row($result)){
   $result2 = mysql_query("SELECT other_id FROM other_table_name");
}
?>
Post #: 7
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 18:21:00.443333   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Все это делается одним запросом. Используй union. И выводи для каждого из объединяемых запросов фиктивное поле, например 0 если это раздел и 1 если это статья
А дальше просто сортируй результат объединения как тебе надо.
Скажем по id раздела и этому фиктивному полю.
Правда, там с причудами этого убогого mySql могут быть приколы.
Но должно работать.
Post #: 8
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 19:01:10.520000   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
Да уж, "Используй union" - именно тот совет, который был нужен человеку, спрашивающему как пользоваться массивами [sm=1.gif]
Post #: 9
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 19:28:13.363333   
Zazzool

Сообщений: 3
Оценки: 0
Присоединился: 2004-03-23 10:33:18
Вот, что у меня получилось:
 
&lt;? $par=1; //номер родительского раздела. $query="SELECT * FROM term_hierarchy WHERE parent=$par"; //Составляем запрос для получения списка выводимых разделов. $result=mysql_query($query); while($row=mysql_fetch_row($result)){ &nbsp;&nbsp;&nbsp; //Итак, мы получили номер выводимого подраздела в $row[0] &nbsp;&nbsp;&nbsp; $query="SELECT * FROM term_data WHERE tid=$row[0]"; //Запрос на получение имени подраздела &nbsp;&nbsp;&nbsp; $razdel=mysql_fetch_array(db_query($query)); &nbsp;&nbsp;&nbsp; $output = '&lt;h2&gt;'; &nbsp;$output .= $razdel["name"]; &nbsp;$output .= '&lt;/h2&gt;'; &nbsp;print $output; &nbsp;//print $razdel["name"]; //Выводим имя подраздела &nbsp;&nbsp;&nbsp; $query="SELECT * FROM term_node WHERE tid=$row[0]"; &nbsp;&nbsp;&nbsp; $result2=mysql_query($query); &nbsp;&nbsp;&nbsp; while($row2=mysql_fetch_row($result2)){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Получили номер статьи &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $query="SELECT * FROM node WHERE nid=$row2[0]"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $article=mysql_fetch_array(mysql_query($query)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $output = '&lt;a href=/node/'.$row2[0].'&gt;'; &nbsp;&nbsp;$output .= $article["title"]; &nbsp;&nbsp;$output .= '&lt;/a&gt;'; &nbsp;&nbsp;print $output; &nbsp;&nbsp;//print $article["title"]; &nbsp;&nbsp;&nbsp; } } ?&gt;  
Что характерно, работает прекрасно. Как раз, то, что нужно. Спасибо всем, кто проявил участие!
 
Если вдруг кому-то, когда-то понадобится… Код делался для вывода каталога статей для замечательной CMS под названием Drupal.
Post #: 10
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 20:50:08.316666   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
+1
Признаю.
Post #: 11
Страниц:  [1]
Все форумы >> [Веб-программинг] >> PHP+MySQL: Вывод списка статей при сложном запросе. Как?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.