PHP+MySQL: Вывод списка статей при сложном запросе. Как?
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
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. Как это сделать, а? Желательно самым коротким и простым путем. У меня знаний на это не хватает. Мои мысли-наброски: Можно ли результат запроса в БД поместить в массив, а потом этот массив использовать в следующем запросе. Т.е. я сначала получаю список разделов, соответствущих определенному параметру. Затем помещаю полученный список в массив. Далее (видимо с помощью цикла) беру по одному разделу из массива и получаю для него список статей. Вывожу на экран. Беру следующий раздел из массива и для него тоже получаю список статей. И так для всех разделов из массива. Меня интересует логика построения такой процедуры, да и синтаксис тоже.
|
|
|
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:37:44.520000
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
Лично я бы начал с переделки структуры БД. 4-я таблица лишняя. 3-я таблица нужна только в том случае, если одна статья может относится к разным разделам
|
|
|
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
|
|
|
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 Алгоритм получения статей для раздела в принципе верный.
|
|
|
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:46:31.256666
|
|
|
Zazzool
Сообщений: 3
Оценки: 0
Присоединился: 2004-03-23 10:33:18
|
Хе, если бы была возможность переделки БД, то и вопрос бы не встал ))) Но такой возможности нету, вот и приходится выверчиваться. 2j0ker_: Пасиб. А как теперь массив скормить другому запросу?
|
|
|
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 17:51:16.396666
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
Ну и не вопрос. Все делается одним SQL запросом
|
|
|
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"); } ?>
|
|
|
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 18:21:00.443333
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
Все это делается одним запросом. Используй union. И выводи для каждого из объединяемых запросов фиктивное поле, например 0 если это раздел и 1 если это статья А дальше просто сортируй результат объединения как тебе надо. Скажем по id раздела и этому фиктивному полю. Правда, там с причудами этого убогого mySql могут быть приколы. Но должно работать.
|
|
|
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 19:01:10.520000
|
|
|
Lex_Voodoo
Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
|
Да уж, "Используй union" - именно тот совет, который был нужен человеку, спрашивающему как пользоваться массивами [sm=1.gif]
|
|
|
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 19:28:13.363333
|
|
|
Zazzool
Сообщений: 3
Оценки: 0
Присоединился: 2004-03-23 10:33:18
|
Вот, что у меня получилось:
<?
$par=1; //номер родительского раздела.
$query="SELECT * FROM term_hierarchy WHERE parent=$par"; //Составляем запрос для получения списка выводимых разделов.
$result=mysql_query($query);
while($row=mysql_fetch_row($result)){
//Итак, мы получили номер выводимого подраздела в $row[0]
$query="SELECT * FROM term_data WHERE tid=$row[0]"; //Запрос на получение имени подраздела
$razdel=mysql_fetch_array(db_query($query));
$output = '<h2>';
$output .= $razdel["name"];
$output .= '</h2>';
print $output;
//print $razdel["name"]; //Выводим имя подраздела
$query="SELECT * FROM term_node WHERE tid=$row[0]";
$result2=mysql_query($query);
while($row2=mysql_fetch_row($result2)){
//Получили номер статьи
$query="SELECT * FROM node WHERE nid=$row2[0]";
$article=mysql_fetch_array(mysql_query($query));
$output = '<a href=/node/'.$row2[0].'>';
$output .= $article["title"];
$output .= '</a>';
print $output;
//print $article["title"];
}
}
?>
Что характерно, работает прекрасно. Как раз, то, что нужно. Спасибо всем, кто проявил участие! Если вдруг кому-то, когда-то понадобится… Код делался для вывода каталога статей для замечательной CMS под названием Drupal.
|
|
|
RE: PHP+MySQL: Вывод списка статей при сложном запросе. Как? - 2006-10-31 20:50:08.316666
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
+1 Признаю.
|
|
|
|
|