Postgresql в нижнем регистре для сравнения данных

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

Я старался:

"SELECT LOWER(name) FROM user_names WHERE name LIKE '%$search%' ORDER BY name ASC"

но из-за этого запрос вообще не работает.

ИЗМЕНИТЬ

Я пытаюсь реализовать автозаполнение пользовательского интерфейса Jquery, как здесь: http://jqueryui.com/demos/autocomplete/#remote для окна поиска (для имен)

используя javascript и php.

php-код:

$search = ($_GET['term']);
       if (!$con)
        { die('Could not connect: ' . pg_last_error ());}

       else
        {

        $sql = "SELECT name FROM users_table WHERE name LIKE '%$search%' ORDER BY name ASC";
        $result = pg_query($sql);
        $json = '[';
        $first = true;
        while ($row = pg_fetch_array($result))
        {

        if (!$first) { $json .=  ','; } else { $first = false; }
        $json .= '{"value":"'.$row['name'].'"}';
    }
    $json .= ']';
    echo $json;

    exit();

    }

Код JavaScript:

   $(document).ready(function()
    {
        $('#auto').autocomplete(
        {
            source: "./file.php",
            minLength: 3

        })

})

все вышеперечисленное отлично работает.. точно так же, как в демо здесь: http://jqueryui.com/demos/autocomplete/#remote

моя проблема в том, что имена в базе данных хранятся в верхнем регистре (например, LORI), и, конечно, пользователь предпочитает вставлять строчные буквы в поле поиска для поиска имени (например, lori). но поскольку он хранится в верхнем регистре, мне нужно его преобразовать.

я попробовал как ваше предложение:

$sql = "SELECT LOWER(name) FROM users_table WHERE name ILIKE '%$search%' ORDER BY name ASC";

то я получил пустой выпадающий список! довольно странно!

заранее спасибо.


person Shadin    schedule 29.04.2012    source источник
comment
Вам нужно установить имя ниже в операторе where, а не в select LOWER(name)   -  person Daniel L. VanDenBosch    schedule 16.11.2018


Ответы (1)


Google — ваш друг:

SELECT LOWER(name) FROM user_names 
WHERE name ILIKE '%$search%' ORDER BY name ASC
person dwurf    schedule 29.04.2012
comment
спасибо, но все же я получил пустой массив из JSON, если я использую LOWER - person Shadin; 29.04.2012
comment
@Shadin Извините, я не очень ясно выразился в своем посте. Предлагается изменить LIKE на ILIKE - person dwurf; 29.04.2012
comment
да, я заметил это и попробовал. я не понимаю, почему я получил пустой массив - person Shadin; 29.04.2012
comment
Это работает здесь: sqlfiddle.com/#!1/f6f97/3 вы можете опубликовать подробнее о вашей схеме? Язык, который вы используете? Проблема, которую вы пытаетесь решить? - person dwurf; 29.04.2012
comment
Извини, @Shadin, я просто не вижу здесь ничего плохого. Я создал свою собственную страницу, используя код, который вы разместили, и он работает нормально. Вот код, который я использовал, возможно, он поможет вам gist.github.com/2554894 - person dwurf; 30.04.2012
comment
СПАСИБО БОЛЬШОЕ dwurf!! это работает, когда я удалил «нижний» и просто использовал ILIKE !! я очень ценю вашу помощь\1 - person Shadin; 30.04.2012