У меня есть таблица 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.
Попробуйте это: SELECT channel_id FROM channel_members GROUP BY channel_id HAVING COUNT(channel_id) > 0
Но это не проверяет, используют ли пользователи 2, 3 и 4 один и тот же канал.
SELECT channel_id FROM channel_members WHERE user_id IN (2,3,4) GROUP BY channel_id HAVING COUNT(channel_id) > 0





Я предполагаю, что вы уже определили свои отношения с помощью моделей. Согласно предоставленному вами описанию, канал имеет отношение от многих ко многим к пользователю.
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
Простите за неудобства. Я изменил свой вопрос, так как мне действительно нужен channel_id. Мне нужно получить channel_id, если у меня есть user_ids, которые используют этот канал, в противном случае, если хотя бы один из user_Id не использует этот channel_id, ничего не вернуть.