Проверьте разделенную запятыми строку в столбце, разделенном запятыми в postgresql - PullRequest
0 голосов
/ 20 мая 2018

У меня есть строка searchval = "php,java,html".

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

Моя таблица

id     keyword
-----------------------------
1      java,php
2      jquery, javascript
3      java
4      php,jquery

Любое из значений searchval (через запятую), соответствующих ключевому слову (через запятую), должно возвращать идентификатор.

Таким образом, результат должен быть:

1 (java,php is there),
3 (java is there),
4 (php is there)

Как я могусделать это?

Ответы [ 2 ]

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

Вы можете легко преобразовать разделенный запятыми список в массив, а затем использовать функции массива Postgres для проверки на наличие:

select id
from the_table
where string_to_array(keyword,',') && array['php','java','html'];

Оператор перекрытия && проверяет, является лиМассив, созданный из списка ключевых слов, содержит элементы из массива с правой стороны.

Онлайн пример: http://rextester.com/VNWP17762

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

Во-первых, важный совет: не не храните разделенные запятыми строки в столбце в базе данных.Это делает обработку излишне сложнее.Вам лучше подумать о создании отдельной таблицы ключевых слов и иметь внешний ключ в вашей таблице в столбце идентификатора.

Вы можете преобразовать строки в ARRAY и выполнить операцию перекрытия. Но для проверки значения по значению вы могли бынеобходимо UNNEST для сравнения.

SQL Fiddle

Настройка схемы PostgreSQL 9.6 :

CREATE TABLE t
    (id int, keyword varchar(18))
;

INSERT INTO t
    (id, keyword)
VALUES
    (1, 'java,php'),
    (2, 'jquery, javascript'),
    (3, 'java'),
    (4, 'php,jquery')
;

Запрос 1 :

SELECT id, 
       string_agg(lang, ',') AS keyword 
FROM   t, 
       unnest(string_to_array(keyword, ',')) AS k(lang) 
WHERE  lang = ANY ( string_to_array('php,java,html', ',') ) 
GROUP  BY id 
ORDER  BY id

Результаты :

| id |  keyword |
|----|----------|
|  1 | java,php |
|  3 |     java |
|  4 |      php |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...