Как получить идентификатор из таблицы, только если она содержит несколько необходимых значений из разных строк

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

Пример: Если в таблице 5 строк

CHANNEL_ID | USER_ID   
2          | 2   
2          | 3   
2          | 4   
3          | 2   
3          | 4   

Мне нужно получить channel_id, которые используются user_id 2, 3 и 4. Исходя из приведенной выше таблицы. Мне нужен channel_id 2.

Простите за неудобства. Я изменил свой вопрос, так как мне действительно нужен channel_id. Мне нужно получить channel_id, если у меня есть user_ids, которые используют этот канал, в противном случае, если хотя бы один из user_Id не использует этот channel_id, ничего не вернуть.

Rick 06.12.2018 04:22

Попробуйте это: SELECT channel_id FROM channel_members GROUP BY channel_id HAVING COUNT(channel_id) > 0

M A 06.12.2018 04:28

Но это не проверяет, используют ли пользователи 2, 3 и 4 один и тот же канал.

Rick 06.12.2018 04:30
SELECT channel_id FROM channel_members WHERE user_id IN (2,3,4) GROUP BY channel_id HAVING COUNT(channel_id) > 0
M A 06.12.2018 04:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
59
2

Ответы 2

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

class Channel extends Model
{
    public function members()
    {
        return $this->belongsToMany('App\User', 'channel_members', 'channel_id', 'user_id');
    }
}

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

$channels = App\Channel::whereHas('members', function ($query) {
                        $query->where('id', '=', 2);
                    })->whereHas('members', function ($query) {
                        $query->where('id', '=', 3);
                    })->whereHas('members', function ($query) {
                        $query->where('id', '=', 4);
                    })->get();  

Выше будут возвращены только каналы, которые связаны со всеми тремя пользователями на основе предоставленного идентификатора.

Запрос существования отношений

SELECT CHANNEL_ID 
FROM channel_members 
WHERE USER_ID in (2,3,4)
GROUP BY CHANNEL_ID 
HAVING COUNT(CHANNEL_ID) > 0

Другие вопросы по теме