2013-09-26 3 views
1

В моей таблице «продукты» У меня есть столбец с именем «ключевые слова».PostgreSQL ищет все индексы массива

Он определяется следующим образом:

CREATE TABLE products (
    id   integer, 
    keywords  character varying[] 
    //rest of the definition ommited for clarity 
); 

Запись в категории столбцов может выглядеть следующим образом:

{music,rock,mp3,nirvana} 

Я пытаюсь реализовать AJAX функции поиска на моем сайте, где на каждое нажатие клавиши вызывает функцию поиска.

Если пользователь пишет «m», я бы хотел, чтобы он запрашивал базу данных и возвращал строку, в которой массив столбцов «keywords» содержит что-либо подобное.

Вот запрос я использую прямо сейчас:

SELECT * FROM products WHERE keywords[1] SIMILAR TO $queryString 

Проблема заключается в том, что с этим запросом только первый индекс ключевых слов [] получает поиск.

Так из моего предыдущего примера:

{music,rock,mp3,nirvana} 

Это поиск только первый индекс, который является «музыка», он не ищет весь массив.

Как я могу запросить этот массив для поиска по FULL ARRAY?

Спасибо!

ответ

1

Попробуйте что-то вроде:

SELECT * FROM products WHERE ANY(keywords) SIMILAR TO $queryString 
1

Согласно документации на массивы найденных здесь http://www.postgresql.org/docs/9.1/static/arrays.html

вы можете запросить поле массива с помощью ANY или ALL:

SELECT * FROM products WHERE ANY(keywords) SIMILAR TO $queryString 
+0

Интересно я получаю синтаксис ошибка для этого запроса. Это сообщение об ошибке: Ошибка запроса: ERROR: ошибка синтаксиса в точке «ЛЮБОЕ» или рядом с ней. Что может быть неправильным? – PeterInvincible

Смежные вопросы