Есть каталог книг, в каждой книге может быть несколько авторов и несколько жанров. В базе данных 5 таблиц: 1.knigi с полями: id, name_k, opis, cost, kol. 2. avtor с полями: id, name_a 3. knigi_a с полями: id, id_knigi_a, id_avtor 4.ganr с полями: id, name_g 5. knigi_g с полями: id, id_knigi_g, id_ganr.
вывожу например книги по авторам:
<?
if(isset($_POST['po_avt']))
{
$ida=$_POST['po_avt'];
$mass_id_a=array();
$res_ka=mysql_query("SELECT `id_knigi_a` FROM `knigi_a` WHERE `id_avtor`='$ida'");
while($arr=mysql_fetch_assoc($res_ka))
{
$mass_id_a[]=$arr['id_knigi_a'];
}
$mass_id_a2=implode(',', $mass_id_a);
$mass_mak=array();
$res_ka2=mysql_query("SELECT * FROM `knigi` WHERE `id` IN($mass_id_a2)");
echo '<table><tr><th>Название:</th><th>Описание:</th><th>Жан р:</th><th>Цена:</th><th>Колличество:</th>';
while($mass_ka2=mysql_fetch_assoc($res_ka2))
{
echo '<tr><td>'.$mass_ka2['name_k'].'</td><td>'.$mass_ka2['opis'].'</td><td>???????</td>
<td>'.$mass_ka2['cost'].'</td><td>'.$mass_ka2['kol'].'</td></tr>';
$mass_mak[]=$mass_ka2;
}
echo '</table>';
}?>
Вопрос как зделать запрос, чтоб в колонке жанр выводились жанры каждой книги, при том что 1 книге может соответсвовать несколько жанров? Или в каком направлении двигаться то?
hydrogen
27.11.2012 - 02:04
Цитата |
Или в каком направлении двигаться то? |
Посмотрите здесьВы хотите, чтобы одной книге соответствовала одна строка в результате, а жанры были указаны в виде списка в одном из полей?
_____________
inpost
27.11.2012 - 03:33
Многие ко многим. Связка. Почитай про первые три нормальных формы БД.
А лучше всего книжку какую-нибудь по
mysql.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Всю книжку по mysql читать времени нету, это мне нужно этот запрос переделать или новый добавить?Я конечно понимаю что этот форум в основном для ссылок на литературу, но может найдётся добрый человек и подскажет.
inpost
27.11.2012 - 10:19
Запрос к книге, получил её поля.
Запрос к таблице связей, получил перечень ID жанров имея ID книги.
Запрос к таблице жанров, получил все жанры по их ID и вывел на экран.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Спасибо большое, помогло. Вот как зделал я, может немного неправильно, но вроде работает:
<?
if(isset($_POST['po_avt']))
{
$ida=$_POST['po_avt'];
$mass_id_a=array();
$res_ka=mysql_query("SELECT `id_knigi_a` FROM `knigi_a` WHERE `id_avtor`='$ida'");
while($arr=mysql_fetch_assoc($res_ka))
{
$mass_id_a[]=$arr['id_knigi_a'];
}
$mass_id_a2=implode(',', $mass_id_a);
$mass_mak=array();
$res_ka2=mysql_query("SELECT * FROM `knigi` WHERE `id` IN($mass_id_a2)");
echo '<table><tr><th>Название:</th><th>Описание:</th><th>Жан р:</th><th>Цена:</ th><th>Колличество:</th>';
while($mass_ka2=mysql_fetch_assoc($res_ka2))
{
echo '<tr><td>'.$mass_ka2['name_k'].'</td><td>'.$mass_ka2['opis'].'</td><td>';
$mass_mak[]=$mass_ka2;
$id_knig=$mass_ka2['id'];
$res_ka3=mysql_query("SELECT * FROM `knigi_g` LEFT JOIN `ganr` ON `knigi_g`.`id_ganr`=`ganr`.`id` WHERE `id_knigi_g`='$id_knig'");
while($mass_ka3=mysql_fetch_assoc($res_ka3))
{
echo $mass_ka3['name_g'].'<br>;
}
echo '</td><td>'.$mass_ka2['cost'].'</td><td>'.$mass_ka2['kol'].'</td></tr>';
}
echo '</table>';
}?>
Если имелось ввиду по другому, и нужно исправить?