PHP поиск с несколькими параметрами - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть запрос, по которому я пытаюсь выполнить поиск по нескольким параметрам, чтобы отсортировать ответ на данные из sql.

Код запроса:

$sql = "SELECT * FROM `apartments` WHERE `building_num`='{$i}' ORDER by `apartment_num` ASC";

Форма поиска:

<form method="GET">
    <input type="hidden" name="page" value="price">
    <select class="styled-select2" name="type">
        <option value="0">Apartment type</option>
        <option value="דופלקס">Duplex</option>
        <option value="דירה">Apartments</option>
        <option value="דירת גן">דירת גן</option>
    </select>
    <select class="styled-select2" name="rooms">
        <option value="0">rooms</option>
        <option value="4">4</option>
        <option value="3">3</option>
        <option value="5">5</option>
    </select>
    <select class="styled-select2" name="price">
        <option value="0">Price</option>
        <option value="700000-800000">700,000-800,000 ₪ </option>
        <option value="800000-900000">800,000-900,000 ₪</option>
        <option value="900000-1000000">900,000-1,000,000 ₪</option>
        <option value="1000000-1100000">1,000,000-1,100,000 ₪</option>
        <option value="1100000-1200000">1,100,000-1,200,000 ₪</option>
        <option value="1200000-1300000">1,200,000-1,300,000 ₪</option>
        <option value="1300000-1400000">1,300,000-1,400,000 ₪</option>
        <option value="1400000">1,400,000 up</option>
    </select>

    <input type="hidden" name="action" value="search">
    <button type="submit">Search</button>
</form>

Существует три параметра, но они не обязательны, может ли клиент использовать только «тип квартиры» И «Цена» ИЛИ только один параметр, я пытался написать несколько часовзапрос без успеха, кто-нибудь может помочь?

// Vars on table apartments
// Rooms - > Rooms
// Price -> price
// Apartment type -> type

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

В этом случае вы должны построить динамический запрос, как показано ниже: -

$sql = "SELECT * FROM `apartments` WHERE ";
$condition = "";
$condition .= ($rooms=='')?"":" or 'rooms'= $rooms ";
$condition .= ($type=='')?"":" or 'type'= $type ";
$condition .= ($price=='')?"":" or prince bewteen 'range_min' AND 'range_max'"; 

$sql .= $condition;
$sql .= " ORDER by `apartment_num` ASC";

Таким образом, вы можете сделать все три фильтра свободными для выбора или нет.

0 голосов
/ 23 сентября 2018

Во-первых, нет прямой связи между запросом (или запросами) и параметрами tge, которые вы предоставляете клиенту ...

Если вы хотите , тогда вы можетеразрешить клиенту заполнить некоторые поля, а если нет, то нет ... это вопрос решения, из которого вытекает разработка

Отсутствует пример кода, поэтому я могу ответить на вопрос относительно запросаи добавьте несколько замечаний

Поскольку вы указали конкретные параметры выбора, вы должны использовать их для конкретных поисков. Я также использовал бы некоторые проверки возвращаемой информации $ _POST

Что касается запроса, янеобходимо предположить, что все опции сохранены в таблице квартир, при этом запрос должен выглядеть примерно так:

$sql = "SELECT * FROM `apartments` WHERE
rooms = $rooms
OR `type` = $type
OR (price BETWEEN  *$range_min* AND *$range_max*) 
ORDER by `apartment_num` ASC";

Если вы хотите, чтобы все параметры были объединены, вы должны использовать AND вместо OR иОпять же, вы можете решить, что хотите оба варианта, и использовать разные запросы для каждого сценария, который пользователь дает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...