Собственно есть main_id(он есть всегда), так же могут быть id1, id2(обязательно должен присутствовать id1), id3(обязательно должны присутствовать id1 и id2). PHP: $result = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$main_id'"); - как бы постоянный запрос, main_id всегда присутствует. PHP: $result1 = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id1'"); - надо делать запрос если есть id1 PHP: $result2 = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id2'"); - надо делать запрос если есть id2 PHP: $result3 = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id3'"); - надо делать запрос если есть id3 Как можно это реализовать одним запросом?
Какой-то глупый вопрос. У тебя четыре переменные, значения которых ты подставляешь в запрос. Как потом узнать какой при выводе использовался? Наверное, сравнить поле со значениями этих переменных. Можно через switch. А вообще, при таком непростом вопросе напрашивается и другое решение - UNION. SELECT 'main' AS `src`, * FROM `table` WHERE `id`='$main' UNION SELECT 's1' AS `src`, * FROM `table` WHERE `id`='$id1' и так далее... и смотрим на поле src. Возможно, тут неправильная архитектура использована при построении базы данных. Какая задача исходная стоит?
Вообще суть вопроса как то поставлена не так, Может так. PHP: $result = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$main_id' OR `id`='$id1' OR `id`='$id2' OR `id`='$id3' "); Но чую тебе на php куском кода перед запросом нужно порешать что конкретно выводить и не париться. PHP: $id=$main_id; $which_id='main_id'; If (!empty($id1)) {$id=$id1; $which_id='id1';} If (!empty($id2)) {$id=$id2; $which_id='id2';} If (!empty($id3)) {$id=$id3; $which_id='id3';} $result = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id' "); $which_id // С помощью нее и узнаешь с какого id брал
PHP: $my_query = "SELECT `id`,`name` FROM `cat` WHERE `id`='$main_id'"; if(isset($id1)) { $my_query = $my_query ." UNION SELECT `id`,`name` FROM `cat` WHERE `id`='$id1'"; } if(isset($id2)) { $my_query = $my_query ." UNION SELECT `id`,`name` FROM `cat` WHERE `id`='$id2'"; } if(isset($id3)) { $my_query = $my_query ." UNION SELECT `id`,`name` FROM `cat` WHERE `id`='$id3'"; } $result = $mysqli->query("$my_query"); if ($result = $mysqli->query($my_query)) { while ($row = $result->fetch_assoc()) { $array[] = $row; } } Всё что надо имеется здесь: $array[0]["name"] $array[1]["name"] $array[2]["name"] $array[3]["name"] Можно ли сделать ещё проще?