За последние 24 часа нас посетили 45355 программистов и 1807 роботов. Сейчас ищут 1130 программистов ...

Как убрать условие из запроса если оно не задействовано?

Тема в разделе "PHP и базы данных", создана пользователем RazerVG, 11 май 2015.

  1. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    К примеру есть форма, где я выбираю дату и статус заказа. Далее по AJAX уже из базы вывожу.
    Запрос в php скрипте делаю
    Код (Text):
    1. "WHERE date = " . $date . " AND status = " . $status . ""
    Вот когда я два условия в форме выбираю, то заказы выводятся, а когда одно нет.
    Как можно это сделать с одним запросом ?

    Вариант с проверкой $_POST и в зависимости от него уже выводить не подходит. Так как это будет 3 разных запроса. А дальше у меня идет форма с 4 полями ....
     
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Вообще ничего не понятно. Попробуйте лучше сформулировать свой вопрос.
    Плюс покажите, как пытались делать запрос с одним условием. И покажите полный запрос, а не только часть where.
     
  3. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Код (Text):
    1. SELECT clients.name, orders_print.date_order, categories.name, status.name FROM orders_print INNER JOIN clients ON orders_print.id_client = clients.id_client INNER JOIN status ON orders_print.id_status = status.id_status INNER JOIN categories ON orders_print.id_category = categories.id_category INNER JOIN managers ON clients.id_manager = managers.id_manager WHERE orders_print.id_status= " . $id_status . " AND managers.id_manager=" . $id_manager . "
    Ну вот к примеру запрос на вывод, он с формы получает два значения $id_status и $id_manager. Форма может отправить как одно значение так и два, а может вообще ничего так как при загрузке значения пустые. Вот как написать такой запрос, чтобы при любых условиях он работал

    Добавлено спустя 2 минуты 21 секунду:
    Раньше я делал так.

    Код (Text):
    1.         if($_POST['dateStart'] != "" && $_POST['dateEnd'] != "") {
    2.             $dateStart = $_POST['dateStart'];
    3.             $dateEnd = $_POST['dateEnd'];
    4.             $query = "SELECT * FROM orders_1C WHERE date_order BETWEEN '" . $dateStart . "' AND '" . $dateEnd . "' AND code_client='000002805'";
    5.         } else {
    6.             $query = "SELECT * FROM orders_1C WHERE code_client='000002805'";
    7.         }
    Может быть можно это сделать в один.
     
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
  5. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    И как ?
     
  6. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    например так, как я всегда делаю
    Код (Text):
    1.  
    2. $sSQL  = 'SELECT `p`.* , `ps`.`stuff`, `img`.`images` FROM `' . $this->_tableProducts . '` `p`';
    3.     $sSQL .= ' LEFT JOIN `' . $this->_tableProductsImages . '` `img`'; .....................
    4.  
    5. $sBody = '';
    6.  
    7. if( isset( $this->_aPrice['start'] ))
    8.     {
    9.       if( '' !== $sBody )
    10.       {
    11.         $sBody .= ' AND ';
    12.       }
    13.      
    14.       $sBody .= ' `p`.`price` >= ' . $this->_aPrice['start'];
    15.     }
    16.    
    17.     if( isset( $this->_aPrice['end'] ))
    18.     {
    19.       if( '' !== $sBody )
    20.       {
    21.         $sBody .= ' AND ';
    22.       }
    23.      
    24.       $sBody .= ' `p`.`price` <= ' . $this->_aPrice['end'];
    25.     }
    26.  
    27. if( '' !== $sBody )
    28.     {
    29.       $sSQL .= ' WHERE' . $sBody;
    30.     }
    31.    
    32.     $sSQL .= ' ORDER BY `p`.`' . $this->_sOrderBy . '`';
    так понятнее? :)