|
|
|
| Доброго!
возник вопрос по генерации страницы в которой принимают участие
две таблицы
1) Темы
2) Страницы
даный вывод осуществляю так
$theme = "algoritms_t";
$page = "algoritms_p";
$t_query= "SELECT * FROM $theme"; //выбрать все темы
$t_res = create_page($t_query); //выполнить запрос
while($t_row=mysql_fetch_assoc($t_res)) //идём по массиву
{
$them_id = $t_row['id']; //определим номер темы
$them_name = $t_row['name']; //определим имя темы
echo "<br><h3>$them_name</h3>";
$p_query= "SELECT * FROM `$page` WHERE `$page`.`id`= $them_id"; //запрос статей
$p_res = create_page($p_query); //выполнить запрос
while($p_row=mysql_fetch_assoc($p_res)) //вывод статей темы
{
$page_id = $p_row['id'];
$page_name = $p_row['name'];
echo "<br> <a href=\"?theme=$them_id,page=$page_name\">$page_name</a>";
}
}
в результате получаю два вложеных цикла, возможно ли оптимизировать даную ф-цию, сделать её более читабельной и практичной? | |
|
|
|
|
|
|
|
для: freel
(20.08.2008 в 17:53)
| | Лучше сделать вложеный запрос уж, чем куча вложеных циклов-вам в раздел MySQL | |
|
|
|
|
|
|
|
для: mihdan
(21.08.2008 в 11:40)
| | а примерчик можно как вы это решаете? | |
|
|
|
|
|
|
|
для: mihdan
(21.08.2008 в 11:40)
| | так не получится, ибо таблиц уже 3, структура их такова
Разделы:
id //auto_increment
name
Темы:
id //auto_increment
id_part //к какому номеру таблицы "Разделы:" имеет принадлежность -
name
Страницы:
id //auto_icriment
-
id_them - к какому номеру таблицы "Темы:" темы пренадлежит -
name
data
передаю с браузера
1) номер раздела
2) номер темы
3) номер страницы
класс "страница"
содержит методы:
/*Метод принимает id и возвращает полную инфу по id данной части
*/
function print_part($id_part)
{
$query= "SELECT * FROM `part` WHERE `part`.`id`= $id_part"; //запрос части
$res = $this->exect_query($query);
return $res;
}
/*Метод принимает id темы и возвращает массив тем с указаным id/
*/
function print_them($id_them)
{
$query= "SELECT * FROM `them` WHERE `them`.`id_part`= $id_them"; //запрос темы
$res = $this->exect_query($query);
return $res;
}
/*Метод принимает id страницы и возвращает массив страниц с указаным id
*/
function print_page($id_page)
{
$query= "SELECT * FROM `page` WHERE `page`.`id_them`= $id_page"; //запрос страниц
$res = $this->exect_query($query);
return $res;
}
в самом же index.php от вложеного цикла уйти не получилось, проходя по массиву тем, приходится каждый раз вызывать function print_page($id_page) передавая в качестве $id_page номер текущей темы
index.php:
$page_obj = new class_page(); //создать объект страничка
$res = $page_obj->print_part($id_part); //вывoд раздела
foreach ($res as $row)
{
echo "<h3> $row[name] </h3>";
}
$res = $page_obj->print_them($id_them); //вывод темы
foreach ($res as $row) //идём циклом по темам
{
echo "<br>them = $row[id]-$row[name]";
$res = $page_obj->print_page($row[id]); //вывод страниц по теме
foreach ($res as $row)//идём циклом по страницам
{
echo "<br>-----$row[name]";
}
}
что бы посоветовали со своего опыта? заранее спасибо. | |
|
|
|