За последние 24 часа нас посетили 32949 программистов и 1756 роботов. Сейчас ищут 845 программистов ...

Всё в один запрос

Тема в разделе "PHP для новичков", создана пользователем rs_ssh, 12 фев 2017.

  1. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Собственно есть main_id(он есть всегда), так же могут быть id1, id2(обязательно должен присутствовать id1), id3(обязательно должны присутствовать id1 и id2).

    PHP:
    1. $result = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$main_id'");
    - как бы постоянный запрос, main_id всегда присутствует.

    PHP:
    1. $result1 = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id1'");
    - надо делать запрос если есть id1

    PHP:
    1. $result2 = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id2'");
    - надо делать запрос если есть id2

    PHP:
    1. $result3 = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id3'");
    - надо делать запрос если есть id3

    Как можно это реализовать одним запросом?
     
  2. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @rs_ssh как то так where ((id=3 or id=null) and (id=2 or id=null)) or id=1
    но чую я гдето туплю
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Опиши таблицу чуть подробнее. А то напрашивается IN()
     
  4. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Пока только id и name.
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ясно-понятно. Ну так и делай WHERE `id` IN('$main_id','$id1','$id2','$id3')
     
  6. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Как потом узнать какой ид('$main_id','$id1','$id2','$id3') использовался при выводе?
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Какой-то глупый вопрос. У тебя четыре переменные, значения которых ты подставляешь в запрос. Как потом узнать какой при выводе использовался? Наверное, сравнить поле со значениями этих переменных. Можно через switch.
    А вообще, при таком непростом вопросе напрашивается и другое решение - UNION.
    SELECT 'main' AS `src`, * FROM `table` WHERE `id`='$main'
    UNION
    SELECT 's1' AS `src`, * FROM `table` WHERE `id`='$id1'
    и так далее... и смотрим на поле src.
    Возможно, тут неправильная архитектура использована при построении базы данных. Какая задача исходная стоит?
     
  8. General_App

    General_App Новичок

    С нами с:
    25 янв 2016
    Сообщения:
    51
    Симпатии:
    1
    Вообще суть вопроса как то поставлена не так,
    Может так.
    PHP:
    1. $result = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$main_id' OR `id`='$id1' OR `id`='$id2' OR `id`='$id3' ");
    Но чую тебе на php куском кода перед запросом нужно порешать что конкретно выводить и не париться.

    PHP:
    1. $id=$main_id; $which_id='main_id';
    2. If (!empty($id1)) {$id=$id1; $which_id='id1';}
    3. If (!empty($id2)) {$id=$id2; $which_id='id2';}
    4. If (!empty($id3)) {$id=$id3; $which_id='id3';}
    5.  
    6. $result = $mysqli->query("SELECT `id`,`name` FROM `cat` WHERE `id`='$id'  ");
    7. $which_id   // С помощью нее и узнаешь  с какого id брал
     
    #8 General_App, 13 фев 2017
    Последнее редактирование: 13 фев 2017
  9. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    PHP:
    1. $my_query = "SELECT `id`,`name` FROM `cat` WHERE `id`='$main_id'";
    2. if(isset($id1))
    3. {
    4.     $my_query = $my_query ." UNION SELECT `id`,`name` FROM `cat` WHERE `id`='$id1'";
    5. }
    6. if(isset($id2))
    7. {
    8.     $my_query = $my_query ." UNION SELECT `id`,`name` FROM `cat` WHERE `id`='$id2'";
    9. }
    10. if(isset($id3))
    11. {
    12.     $my_query = $my_query ." UNION SELECT `id`,`name` FROM `cat` WHERE `id`='$id3'";
    13. }
    14. $result = $mysqli->query("$my_query");
    15. if ($result = $mysqli->query($my_query))
    16. {
    17.     while ($row = $result->fetch_assoc())
    18.     {
    19.         $array[] = $row;
    20.     }
    21. }
    Всё что надо имеется здесь:
    $array[0]["name"]
    $array[1]["name"]
    $array[2]["name"]
    $array[3]["name"]


    Можно ли сделать ещё проще?