[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с запросом mysql
xcyas
Есть каталог книг, в каждой книге может быть несколько авторов и несколько жанров. В базе данных 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
Цитата
Или в каком направлении двигаться то?

Посмотрите здесь

Вы хотите, чтобы одной книге соответствовала одна строка в результате, а жанры были указаны в виде списка в одном из полей?

_____________
inpost
Многие ко многим. Связка. Почитай про первые три нормальных формы БД.
А лучше всего книжку какую-нибудь по mysql.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
xcyas
Всю книжку по mysql читать времени нету, это мне нужно этот запрос переделать или новый добавить?Я конечно понимаю что этот форум в основном для ссылок на литературу, но может найдётся добрый человек и подскажет.
inpost
Запрос к книге, получил её поля.
Запрос к таблице связей, получил перечень ID жанров имея ID книги.
Запрос к таблице жанров, получил все жанры по их ID и вывел на экран.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
xcyas
Спасибо большое, помогло. Вот как зделал я, может немного неправильно, но вроде работает:
<?
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>';
}?>
Если имелось ввиду по другому, и нужно исправить?
Быстрый ответ:

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