Как отсортировать записи (по порядку) в моем случае - PullRequest
2 голосов
/ 06 июня 2019

Привет! Я пытаюсь отсортировать совпадение по данным, но что-то не так, я не знаю, куда поместить ORDER BY data DESC в моем коде.

данные - это пул в моей таблице, когда у меня есть данные со временем.Если я ставлю в конец строки data_in, код перестает работать, когда я ставлю 2 данные (data_in data_out), я также ставлю позади WHERE 1=1 и тоже прекращаю работать, так как это сделать?

$query = "SELECT * FROM database WHERE 1=1 ";   

if ($name != ''){
    $query.=" and name like '%$name%' ";
}

if ($number != ''){
    $query.=" and number like '%$number%' ";
}

if ($person != ''){
    $query.=" and person like '%$person%' ";
}

if ($data_in != ''){
    $query.=" and data_in >= '{$data_in} 00:00:00'::timestamp ";
}

if ($data_out != ''){
    $query.=" and data_out <= '{$data_out} 23:59:00'::timestamp ";
}

if ($case != ''){
    $query.=" and case like '%$case%' ";
}           

$result = pg_query($query);

Ответы [ 4 ]

0 голосов
/ 06 июня 2019

После окончания всего предложения (в вашем случае предложение where)

  $query.=" and case like '%$case%' ";}           

  $query.="  order by  my_column1, my_column2 ,  ,,, my_last_col ";}     

  $result = pg_query($query);
0 голосов
/ 06 июня 2019

Отдельная строка, которая идет непосредственно перед строкой $result = ...:

$query .= " ORDER BY data DESC "
0 голосов
/ 06 июня 2019

Вы можете сделать заказ по данным, поместив «ORDER BY» после условий и перед использованием pg_query ().Вы можете использовать следующий код.

$query = "SELECT * FROM database WHERE 1=1 ";   

if ($name != ''){
        $query.=" and name like '%$name%' ";}

if ($number != ''){
        $query.=" and number like '%$number%' ";}

if ($person != ''){
        $query.=" and person like '%$person%' ";}
if ($data_in != ''){
        $query.=" and data_in >= '{$data_in} 00:00:00'::timestamp ";}
if ($data_out != ''){
        $query.=" and data_out <= '{$data_out} 23:59:00'::timestamp ";}
if ($case != ''){
        $query.=" and case like '%$case%' ";}           

$query.="ORDER BY data_in DESC";
        $result = pg_query($query);
0 голосов
/ 06 июня 2019

Во-первых, вы не должны добавлять 1 = 1, так как он покажет все записи.Вы можете удалить это.после того, как вы можете добавить порядок на все, если условие, как показано ниже:

$query = "SELECT * FROM database WHERE ";   
$whereQuery = [];
if ($name != ''){
        $whereQuery[] = " name like '%$name%' ";}

if ($number != ''){
        $whereQuery[] =" number like '%$number%' ";}

if ($person != ''){
        $whereQuery[] =" person like '%$person%' ";}
if ($data_in != ''){
        $whereQuery[] =" data_in >= '{$data_in} 00:00:00'::timestamp ";}
if ($data_out != ''){
        $whereQuery[] =" data_out <= '{$data_out} 23:59:00'::timestamp ";}
if ($case != ''){
        $whereQuery[] =" case like '%$case%' ";}           

$completeQuery = $query.implode(" and ", $whereQuery)." order by data";  
$result = pg_query($completeQuery);

Кроме того, ваш запрос открыт для внедрения SQL.Вместо того, чтобы объединять переменные, вы должны связывать переменные.

Надеюсь, это поможет вам !!

...