Запрос, если столбец массива содержит одно или несколько значений или нет - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть модель PropertyPromotion, у которой есть атрибут, называемый платформой, значения которого являются типом данных массива.Мне нужно запросить все PropertyPromotion, атрибут платформы которых имеет значения, которые присутствуют в каком-то конкретном массиве.

Например: у меня есть массив

platform = ["android"]

PropertyPromotion.platform может иметь значения как["android", "iphone"]

Мне нужно вернуть все PropertyPromotion, которые могут иметь либо "android", либо "iphone" в качестве одного из значений массива платформы

Я попробовал следующее:

PropertyPromotion.where("platform @> ARRAY[?]::varchar[]", platform)
PropertyPromotion.where("platform && ARRAY[?]::varchar[]", platform)
PropertyPromotion.where('platform @> ARRAY[?]::integer[]', platform)

Но я получил синтаксическую ошибку ниже: -

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@> ARRAY['android']::integer[])' at line 1: SELECT `property_promotions`.* FROM `property_promotions` WHERE (platform @> ARRAY['android']::integer[])

Моя версия mysql - mysql Ver 14.14 Distrib 5.7.25, for osx10.14 (x86_64) using EditLine wrapper

И я также не могу изменить версию, потому чтоэто существующий проект.

Любые решения ??

1 Ответ

0 голосов
/ 19 сентября 2019

, если platform = ["android"] - это массив строк, которые вы можете использовать

PropertyPromotion.where('platform in (#{platform_arr})')

, где platform_arr - это массив, содержащий значения, которые вы хотите получить
ex.platform_arr = ['android','ios']

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