[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с базой mysql. Вывод данных.
Сергей А.
Добрый день.
Описываю проблему.

Сейчас решил для себя (начающий в изучении php) сделать базу фильмов, анимации и т.п.
Работаю в денвере 2й версии со стандартным набором.
Создал 2 таблицы в phpmyadmin. Таблица 1 - (data) с данными. Таблица 2 - (janrs) жанры кино.
Из второй таблицы данные подставляются в первую при занесении через форму.
У каждого фильма не один жанр (например, боевик и комедия).
С помощью формы добавляю запись в таблицу дата попутно выбираю из второй таблицы жанры фильма. Привожу кусок формы именно с выборкой из второй таблицы. У меня выбираются 3 жанра. Т.е. в таблицу data подставляются переменные из второй таблицы janrs.

Первый жанр

<select name="janr">
<?

$result5 = mysql_query("SELECT text,id FROM janrs",$db);
if (!$result5)
{
echo "<p>Запрос на выборку данных из базы не прошел. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result5) > 0)
{
$myrow5 = mysql_fetch_array($result5);
do
{
printf ("<option value='%s'>%s</option>",$myrow5["id"],$myrow5["text"]);
}
while ($myrow5 = mysql_fetch_array($result5));
}
else
{
echo "<p>Информация по запросу не может быть извлечена, в таблице нет записей.</p>";
exit();
}
?>
</select>


Второй жанр
<select name="janr2">
<?

$result6 = mysql_query("SELECT text,id FROM janrs",$db);
if (!$result6)
{
echo "<p>Запрос на выборку данных из базы не прошел. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result6) > 0)
{
$myrow6 = mysql_fetch_array($result6);
do
{
printf ("<option value='%s'>%s</option>",$myrow6["id"],$myrow6["text"]);
}
while ($myrow6 = mysql_fetch_array($result6));
}
else
{
echo "<p>Информация по запросу не может быть извлечена, в таблице нет записей.</p>";
exit();
}
?>
</select>


Третий жанр
<select name="janr3">
<?

$result7 = mysql_query("SELECT text,id FROM janrs",$db);
if (!$result7)
{
echo "<p>Запрос на выборку данных из базы не прошел. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result7) > 0)
{
$myrow7 = mysql_fetch_array($result7);
do
{
printf ("<option value='%s'>%s</option>",$myrow7["id"],$myrow7["text"]);
}
while ($myrow7 = mysql_fetch_array($result7));
}
else
{
echo "<p>Информация по запросу не может быть извлечена, в таблице нет записей.</p>";
exit();
}
?>
</select>




Т.е. после этого при просмотре файла с данными конкретного фильма movie.php у меня выводятся данные из таблицы data.
Запрос к таблице:

<?php 
include ("blocks/bd.php"); /* подключение к базе данных */
if (isset($_GET['id'])) {$id = $_GET['id'];}

$result1 = mysql_query("SELECT
da.`id`,
da.`meta_d`,
da.`meta_k`,
da.`cover`,
da.`title`,
da.`title_org`,
da.`title_rus`,
da.`type`,
tp.`text` AS tp_t, /*тут выборка типа фильма - полнометражный, короткометражный, сериал и т.п. Тут всё нормально.*/
da.`series`,
da.`disk_type`,
da.`sub_snd`,
da.`klv_disk`,
da.`skl_vst`,
da.`disk_nom`,
da.`disk_name`,
da.`date`,
da.`director`,
da.`study`,
st.text AS st_t, /*тут выборка типа фильма - полнометражный, короткометражный, сериал и т.п. Тут всё нормально.*/
da.`janr`,
jn.`text` AS jn_t, /*вот тут выборка жанра фильма.*/
da.`janr2`,
da.`janr3`,
da.`country`,
da.`file`,
da.`discription`,
da.`screen1`,
da.`screen2`
FROM
data_anime AS da,
types AS tp,
studys AS st,
janrs AS jn
WHERE da.id='
$id' AND da.type = tp.id AND da.study = st.id AND da.janr = jn.id",$db);

if (!$result1)
{
echo "<p>Неверный запрос!!!. Отправьте сообщение администратору.
<br> <strong>Код ошибки:</strong>
</p>"
;
exit(mysql_error());
}
if (mysql_num_rows($result1) > 0)
{
$myrow1 = mysql_fetch_array($result1);
}
else
{
echo "<p>Ошибка выполнения запроса. Неудача!!!</p>";
exit();
}

?>



Если оставить так как есть (как описано выше), то у второго и третьего жанра фильма выводятся только значения полей из таблицы janrs - 1,2,3 и т.д. А у значения поля janr - всё путем (выводится текст, который соответствует полю со значением id в таблице janrs. Если 1, то боевик, 2 - комедия, 3 - ужасы и т.д.
Как сделать так, что бы у остальных полей выводилось также как и у первого жанра?





Спустя 17 минут, 36 секунд (19.04.2010 - 13:40) sergeiss написал(а):
Вот как только вижу цикл do-while при выборе данных в БД, то даже не вникаю в суть вопроса. Потому что для "жертв поповщины" тут есть таблетка (крэк практически wink.gif).

Читай тут: http://phpforum.ru/index.php?showtopic=21916

Спустя 50 минут, 41 секунда (19.04.2010 - 14:31) Сергей А. написал(а):
sergeiss
но вопрос остался без ответа. С циклом я разберусь позже. Подскажи как правильно вывести значения.

Вывод всех данных:

<?php
printf ("
<div class='cover' align='center'>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
"
,$myrow1["cover"],$myrow1["title"],$myrow1["title_org"],$myrow1["title_rus"],$myrow1["tp_t"],$myrow1["series"],$myrow1["disk_type"],$myrow1["sub_snd"],$myrow1["klv_disk"],$myrow1["skl_vst"],$myrow1["disk_nom"],$myrow1["disk_name"],$myrow1["date"],$myrow1["director"],$myrow1["st_t"],$myrow1["jn_t"],$myrow1["janr2"],$myrow1["janr3"],$myrow1["country"],$myrow1["file"],$myrow1["discription"],$myrow1["screen1"],$myrow1["screen2"]);
?>

Спустя 25 минут, 49 секунд (19.04.2010 - 14:57) sergeiss написал(а):
Цитата (Сергей А. @ 19.04.2010 - 15:31)
С циклом я разберусь позже. Подскажи как правильно вывести значения.

А ты прочитай все-таки тему по ссылке smile.gif Там есть и про то, как правильно выводить.

Но!!! Если у тебя проблемы с самим запросом (как мне почему-то кажется), то ты и спрашивай про запрос, как его организовать.

Спустя 5 минут, 52 секунды (19.04.2010 - 15:02) Сергей А. написал(а):
Да-да, проблема с запросом на выборку. Не понимаю, как его правильно организовать.

Спустя 5 часов, 30 минут, 33 секунды (19.04.2010 - 20:33) HardWoman написал(а):
А можно увидеть структуру таблиц?

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

таблица видимо должна выглядеть так.
ID авто
ID фильма
ID жанра

ID жанра
Text/название жанра

При объединении таблиц вы просто выберете массив значений, пришедших с интерфейса Зачем здесь цикл?

Стало понятнее у вас два параметра, причем один из них может иметь множественные значения. таблица может выглядеть так или по другому

ID авто
ID фильма
ID жанра\формата
ID параметра


ID жанра/формата
text

Если значения уникальные, то можно не добавлять поле ID параметра во вторую таблицу, но это не будет логически правильно, потому как количество параметров может со временем увеличиться.


Стандартный подход - создание под каждый параметр своей таблицы, а то вдруг при моем способе понадобится добавить цену и тогда числовой параметр придется записывать в текстой вид. тут решений несколько есть - просто нужно понимать, что вам может в дальнейшем понадобится

Тот вывод, который я у вас наблюдаю - это разные логические массивы. Жанры и форматы и жанры могут иметь множественное значение

Вам бы по архитектурам баз данных литературу почитать. Тогда будете понимать как правильно хранить информацию и как правильно с ней работать

Спустя 4 минуты, 10 секунд (19.04.2010 - 20:37) denlam написал(а):
Цитата (sergeiss @ 19.04.2010 - 10:40)
Вот как только вижу цикл do-while при выборе данных в БД, то даже не вникаю в суть вопроса. Потому что для "жертв поповщины" тут есть таблетка (крэк практически wink.gif).

Читай тут: http://phpforum.ru/index.php?showtopic=21916

Простите за оффтоп.
sergeiss жжОшь biggrin.gif
От Попова действительно очень много людей вышло:)) сам из той же категории))

Спустя 1 минута, 23 секунды (19.04.2010 - 20:39) sergeiss написал(а):
Цитата (HardWoman @ 19.04.2010 - 21:33)
Я видимо туплю, но не понимаю...


Я другого не понимаю: человек озвучивает, что ему непонятно, как сделать запрос, но зачем-то показывает вывод данных.

denlam - ты не поверишь, наверное smile.gif но "поповский" код появляется на форуме едва ли не каждый день. И люди пытаются на этой основе что-то сделать.

Спустя 2 дня, 18 часов, 32 минуты, 7 секунд (22.04.2010 - 15:11) Сергей А. написал(а):
Таблица data
id janr
id janr2
id janr3

Таблица janrs
id
text

Спустя 5 дней, 20 часов, 30 минут, 7 секунд (28.04.2010 - 11:41) Guest написал(а):
вот если делаю такой запрос:


$result = mysql_query("SELECT id,title FROM data_anime WHERE `janr` = '$janr' OR `janr2` = ' $janr' OR `janr3` = '$janr' ORDER BY title",$db);


то у меня выводится только одна запись. Например, жанр "боевик", то выводится запись, где в переменной janr значится "боевик.
Причем если в переменной janr2 числится жанр "боевик", то эта запись не выводится.
Быстрый ответ:

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