Использование функции Age из postgresql через PHP - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь отфильтровать результаты по возрастному диапазону.В моей базе данных есть таблица с столбцом dob, поэтому я пытаюсь использовать функцию AGE postgreSql, чтобы получить возраст из dob.Но это не работает.Ниже приведен мой код.

contact.php

<div class="form-group">
    <label> Filter by Age</label>
    <div class="input-group">
        <input id="start-age" type="text" name="from-age" class="form-control" placeholder="from" />
        <input id="end-age" type="text" name="to-age" class="form-control" placeholder="to" />
    </div>
</div>

<script>
    $(document).ready(function() {
        $('body').on('change', '#end-age', function () {
            var from_age = $('#start-age').val();
            var to_age = $(this).val();

            var queryString1;
            var queryString2;
            if(location.search && from_age != -1 && to_age != -1){
                queryString1 = getQueryObj(location.search);
                queryString2 = getQueryObj(location.search);
                $.each(queryString1,function(i,e){
                    queryString1[i] = decodeURIComponent(e);
                });
                $.each(queryString2,function(i,e){
                    queryString2[i] = decodeURIComponent(e);
                });
                queryString1.from_filter = from_age;
                queryString2.to_filter = to_age;

            } else if(from_age == -1 && to_age == -1){
                queryString1 = getQueryObj(location.search);
                queryString2 = getQueryObj(location.search);
                delete queryString1.from_filter;
                delete queryString2.to_filter;
            } else {
                queryString1 = {from_filter:from_age};
                queryString2 = {to_filter:to_age};
            }
            window.location.replace('/user?'+ $.param(queryString1) + '&' + $.param(queryString2));
        });
    });

</script>

contactController.php

<?php
class userController extends AdminController {

    function __construct(){
        parent::__construct("Contact","contacts");
    }

    function index(Array $params = []){

        $ageSql = "";
        if(isset($_GET['from_filter']) && isset($_GET['to_filter'])) {
            $from_age = $_GET['from_filter'];
            $to_age = $_GET['to_filter'];
            $ageSql = "SELECT id FROM user WHERE AGE(timestamp dob) >= $from_age AND AGE(timestamp dob) <= ($to_age)";
            $params['queryOptions']['where'][] = "contact_id = $ageSql";

        }
        parent::index($params);
    }
}

Когда я пыталсявыше SQL в Postgre, я получаю сообщение об ошибке, что возраст не определена функция.Я хочу, чтобы все пользователи находились в диапазоне возраста, выбранного пользователем на панели фильтров.Помощь приветствуется.ТИА

1 Ответ

0 голосов
/ 24 мая 2018

Попробуйте использовать now() вместо timestamp.Также, если вы хотите сравнить только годы, используйте EXTRACT YEAR form AGE(), что даст вам только год.Предполагая, что ваш dob имеет тип даты или времени:

$ageSql = "SELECT id FROM table WHERE EXTRACT(YEAR FROM AGE(now(), dob)) >= 25 AND EXTRACT(YEAR FROM AGE(now(), dob)) <= 40";
$params['queryOptions']['where'][] = "contact_id IN $ageSql"; //use 'IN' in case more than 1 row

И если 'dob' имеет какой-то тип varchar или text, приведите его так: dob::timestamp

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