Заявление Laravel Mysql, такое как условие темы fcm

Я пытаюсь сделать свою собственную систему тем, похожую на fcm в mysql. Таблица просто так:

user_id  topic_name

Например, в fcm:

'topic1' in topics && 'topic2' in topics or ('topic3' in topics)

означает выбор пользователя, который подписан на топик1 и топик2 или подписан на топик3.

В mysql я понятия не имею, как это сделать, в основном это основано на всех эквивалентных user_id, но на разных условиях для темы_названия, но с использованием whereIn и whereNotIn и т. Д. Я действительно запутался.


person steve moretz    schedule 11.10.2020    source источник
comment
в mysql (темы = 'тема1' И темы = 'тема2') ИЛИ темы = 'тема3'   -  person nbk    schedule 12.10.2020
comment
@nbk тема1 и тема2 сохраняются в 2 строки, так что это не сработает. верно?   -  person steve moretz    schedule 12.10.2020
comment
Нет, вы можете изменить его на ИЛИ или использовать темы IN ('topic1','topic2', 'topic3')   -  person nbk    schedule 12.10.2020
comment
Что мне делать, а потом?   -  person steve moretz    schedule 12.10.2020
comment
У меня нет ответа, потому что я не знаю, что именно вы ищете. сделать thw quwry и посмотреть, если вы получите все необходимые rws   -  person nbk    schedule 12.10.2020


Ответы (1)


Я подозреваю, что вам нужна агрегация и предложение having:

select user_id
from mytable
where topic_name in ('topic1', 'topic2', 'topic3')
group by user_id
having count(*) = 3

Это приводит пользователей, у которых есть три темы, перечисленные в предложении where.

person GMB    schedule 12.10.2020
comment
@stevemoretz: предложение have гарантирует, что в группе есть 3 строки, а предложение where фильтрует три темы, которые вас интересуют. В совокупности они гарантируют, что у пользователя есть все три темы. - person GMB; 15.10.2020
comment
Спасибо, но, к сожалению, это не решает всю проблему. Это было немного сложнее. \'.*?в темах/m', user_id в (выберите user_id из push_notification_topics, где r.user_id = user_id и theme_name = '$1'), preg_replace( '/\|\|/m', 'или', preg_replace( '/&&/m', 'и', $условие ))) это ответ, который я получил. Мне пришлось выбрать таблицу в первом выборе, чтобы она проверяла все вещи, а также все и и или работает. С небольшим немного регулярного выражения - person steve moretz; 15.10.2020