[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как правильно сделать запрос из трех связанных таб
MrBrown
Здравствуйте!
На сайте "Золотая лилия" (lilygold.ru)в рубрике "сорта культур" (в верхнем меню) в таблицах находятся они самые, сорта. Их слишком много, а будет еще больше, и мне хочется их систематизировать с помощью дополнительного меню, как показано по ссылке: (http://lilygold.ru/view_sorts.php). Её я сделал специально для понимания моей проблемы.
Но, вот беда, нижеприведенный код дает результат только первой культуры (арбуз), хотя при выборе другой культуры одновременно меняется и id в адресной строке. Итак, база содержит три таблицы:
CREATE TABLE `types` (
`id` int(11) NOT NULL auto_increment,
`number` int(11) NOT NULL,
`type` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
)


CREATE TABLE `plants` (
`id` int(2) NOT NULL auto_increment,
`id_type` int(11) NOT NULL,
`plant` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
)


CREATE TABLE `sorts` (
`id` int(4) NOT NULL auto_increment,
`id_plant` int(2) NOT NULL,
`sort` varchar(100) default NULL,
`time` varchar(100) default NULL,
`mass` varchar(100) default NULL,
`weight` varchar(100) default NULL,
`keeping` varchar(100) default NULL,
`stability` varchar(100) default NULL,
`hothouse` varchar(100) default NULL,
`note` text,
PRIMARY KEY (`id`)
)

А вот сам код (точнее, его часть) страницы view_sorts.php:
<?php 

/* Меню, в котором все три таблицы последовательно связаны через поля id_type и id_plant*/

$result = mysql_query('SELECT * FROM types GROUP BY types.id;');
echo'<ul id="cssmenu">';
while ($myrow = mysql_fetch_assoc($result))
{
echo'<li><a href="#"><strong>'.$myrow['type'].'</strong></a>';
$result2 = mysql_query('SELECT * FROM plants WHERE id_type = \''.$myrow['id'].'\';');
echo'<ul>';
while ($myrow2 = mysql_fetch_assoc($result2))
{
$result3 = mysql_query('SELECT * FROM sorts WHERE id_plant = \''.$myrow2['id'].'\';');
echo'<li><a href="view_sorts.php?id='.$myrow2['id'].'">'.$myrow2['plant'].'</a>';
echo'</li>';
}
echo'</ul>';
echo'</li>';
}
echo'</ul>';

//Конец меню.

/* Вывод таблицы. Сомневаюсь, надо ли было делать повторные запросы. Но без них таблица даже не появляется в браузере.*/


$result = mysql_query('SELECT * FROM types GROUP BY types.number;');
$myrow = mysql_fetch_assoc($result);

$result2 = mysql_query('SELECT * FROM plants WHERE id_type = \''.$myrow['id'].'\';');
$myrow2 = mysql_fetch_assoc($result2);

$result3 = mysql_query('SELECT * FROM `sorts` WHERE id_plant = \''.$myrow2['id'].'\';');

echo '<strong>'.$myrow2['plant'].'</strong>';

echo '<ul>'; /* Список сортов*/
echo '<li><p>';/*строка сортов*/

echo'<table width="100%" border="1" cellspacing="1" cellpadding="1" style="border-collapse: collapse">';
echo'<tr class="sorts">';
echo'<th width="160" align="center"><strong>Сорт</strong></th>';
echo'<th width="60"align="center"><strong>Срок</strong></th>';
echo'<th width="60"align="center"><strong>Масса</strong></th>';
echo'<th width="60"align="center"><strong>Урожай</strong></th>';
echo'<th width="60"align="center"><strong>Лёжкость</strong></th>';
echo'<th width="100"align="center"><strong>Устойчивость</strong></th>';
echo'<th width="60"align="center"><strong>Условия</strong></th>';
echo'<th align="center"><strong>Примечание</strong></th>';
echo'</tr>';

/* Здесь использована небольшая распространенная фенечка, позволяющая делать "зебру" в таблице для лучшей её читабельности*/

$i=0;
while($myrow3 = mysql_fetch_assoc($result3))
{
if($i%2)
echo'<tr class="even">';
else
echo'<tr class="odd">';

echo'<td align="center">'.$myrow3['sort'].'</td>';
echo'<td align="center">'.$myrow3['time'].'</td>';
echo'<td align="center">'.$myrow3['mass'].'</td>';
echo'<td align="center">'.$myrow3['weight'].'</td>';
echo'<td align="center">'.$myrow3['keeping'].'</td>';
echo'<td align="center">'.$myrow3['stability'].'</td>';
echo'<td align="center">'.$myrow3['hothouse'].'</td>';
echo'<td align="left">'.$myrow3['note'].'</td>';
echo'</tr>';

$i++;
}

echo'</table><br>';
echo '</p>'; /*строка сортов закончена*/
echo '</ul>';

?>

Итак, прошу помощи, кому не лень покопаться в моём коде. Чувствую, истина где-то рядом, но пока сам не нашел.
Спасибо.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.