1 запрос на несколько вариантов id

a1exey

Новичок
1 запрос на несколько вариантов id

Народ, поскажите пожалуйста как сделать средствами пхп всего 1 запрос в базу, чтобы узнать 5 полей name для каждого id?
пример:
есть таблица жанров
id, name
есть таблица фильмов в которой в поле janr указаны жанры id1|id2|id3|id4|id5
можно ли оптимизировать код чтобы не 5 запросов делать в базу и пробивать имя для каждого id, а сделать 1 запрос с выбором всех имён и id, а после сравнить два массива (с id жанрами у фильма и id жанрами таблицы) и вывести имена тех id которые указаны в поле janr.
или может поскажите функцию какую в php. или примерно как это сделать.
сейчас у меня вот такой код

$ag = $film["janr"];
$genrs = explode("|", $ag);
$num = count($genrs) - 1;
for ($i = 0; $i < $num; $i++)
{
$m = mysql_fetch_row(mysql_query("SELECT name FROM janres WHERE id = $genrs[$i]"));
$arrgenres .= $m[0];
}
и в конце вывод $arrgenres.
буду благодарен за любую помощь.
 

zerkms

TDD infected
Команда форума
сделать 5 INNER JOIN ;))))))))))))
либо нормализовать базу данных
 

Rammstein

PHPClub::News
Для начала пересмотреть структуру БД. Я бы связал фильмы и жанры через промежуточную таблицу (связь многие ко многим).

В данном случае есть варинт:
Составить SQL запрос (опять же в цикле):
SELECT name FROM janres WHERE id = $genrs[$i] OR id = $genrs[$i+1] ... (и т.д., типа)
 

yaniks

новичок
'SELECT name FROM janres WHERE id rlike "'.$film["janr"].'"'

а вообще если ты получаешь данные с первой и второй таблицы отдельно используй IN

$genrs = explode("|", $ag);
'SELECT name FROM janres WHERE id IN("'.implode('","', $genrs).'") ';
 

a1exey

Новичок
всем спасибо, проблему решил :)
$janres = mysql_query("SELECT * FROM `janres` WHERE id<>0");
while ($row = mysql_fetch_array($janres))
$janrarray[$row[id]] = $row['name'];

$janr = explode("|", $ag);
$arrgenres = "";
foreach ($janr as $value)
if ($value)
{
if ($arrgenres)
$arrgenres = $arrgenres.', ';
$arrgenres = $arrgenres.$janrarray[$value];
}
?>
Жанр: <?=$arrgenres;?><br>

yaniks спасибо за совет с IN
 
Сверху