Как получить идентификатор из таблицы, только если она содержит несколько необходимых значений, из разных строк - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть таблица 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.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018
SELECT CHANNEL_ID 
FROM channel_members 
WHERE USER_ID in (2,3,4)
GROUP BY CHANNEL_ID 
HAVING COUNT(CHANNEL_ID) > 0
0 голосов
/ 06 декабря 2018

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

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();  

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

Запрос наличия отношений

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