Ребят, помогите упростить цикл вывода новостей. В очень упрощённом виде код выглядит так: Код (Text): $query = mysql_query("SELECT * FROM `portal_news` ORDER BY `date` DESC LIMIT 20", $db); while ($row = mysql_fetch_array($query)) { //проверяем, голосовал ли уже человек за новость $query1 = mysql_query("SELECT id FROM `portal_votes` WHERE (`module`='news') AND (`id_entry`='{$row['id']}') AND (`id_member`='{$user->data['user_id']}') LIMIT 1", $db); $voteble = mysql_num_rows($query1); if ($voteble > 0) { $voteble=''; } else { $voteble=' voteble'; } //вытаскиваем название категории по её id $query2 = mysql_query("SELECT title FROM `portal_categories` WHERE (`module`='news') AND (id='{$row['category']}') LIMIT 1", $db); $row2 = mysql_fetch_array($query2); //вытаскиваем имя автора новости по его id $query3 = mysql_query("SELECT username FROM `phpbb_users` WHERE user_id='{$row['author']}' ", $db); $row3 = mysql_fetch_array($query3); //вывод $output.=' <h2>'.$row['title'].'</h2> <h4>Категория: '.$row2['title'].'</h4> <div class="rating'.$voteble.'"></div> <div class="content">'.$row['content'].'</div> <p>Автор новости: '.$row3['username'].'</p> '; } echo $output; Как тут можно объединить запросы $query1, $query2 и $query3 в один? В идеале к ним бы ещё конечно и $query прилепить, но мне сейчас хотя бы с этими тремя разобраться.
Почитай мануал MySQL про JOIN. Здесь несложно оставить всего один запрос, который вернёт список новостей, а также их авторов, голоса и названия категорий. Добавлено спустя 1 минуту 8 секунд: Кстати, так MSSQL или MySQL? А то в названии темы MS, а в коде - mysql_query
Почитал мануал по джойн, посмотрел топорные примеры, но так и не смог составить правильный запрос для своего случая. Да и примеры в основном описывают для двух запросов, а не для трёх. Кто-нибудь может накатать наглядный пример, как сделать запрос сразу к трём таблицам с параметрами WHERE в каждом? Не обязательно с моим кодом, я попробую сделать по аналогии.
Ну типа такого, наверно: Код (Text): SELECT `tab1`.`id`, `tab1`.`fld1`, `tab1`.`fld2`, `tab2`.`id`, `tab2`.`fld21`, `tab2`.`fld22`, `tab3`.`fld31` FROM `tab1`, INNER JOIN `tab2` ON (`tab2`.`tab1_id` = `tab1`.`id`) INNER JOIN `tab3` ON (`tab3`.`tab2_id` = `tab2`.`id`) WHERE `tab1`.`fld3` LIKE '%some_string%' AND `tab2`.`fld25` > 11 AND `tab2`.`fld25` < 25 AND `tab3`.`fld33` = 'ok' ORDER BY `tab2`.`fld23` ASC LIMIT 30, 15;