PHP ve MySQL kullanıyorum.
Ben aşağıdaki alanları user_groups
bir tablo var
id, userID, groupID
Bir kullanıcı birçok grup ile ilişkili olabilir, bu yüzden bu tablodan belirli bir kullanıcı kimliği seçtiyseniz o zaman ben Groupıd ait birkaç ile gelebilir
Ben aşağıdaki alanları group_messages
başka bir tablo var
id, groupID, message
Ben Groupıd belirli bir kullanıcı kimliği ile ilişkili group_messages tablodan tüm iletileri, nasıl ben bu sorgu yazabilirsiniz seçmek istiyorsanız? Ben ilk userID belirli bir kimliği olduğunu user_groups tablodan Groupıd yıllardan tümünü seçin ve ardından Groupıd ben user_groups tablosundan seçmiş olduğu herhangi bir group_messages gelen tüm iletileri seçmek gerekir.
Bu nedenle, tarafından user_groups tablodan Groupıd yılların tüm seçebilirsiniz:
SELECT * FROM user_groups WHERE userID = '3'
Bu Groupıd adlı bir dizi dönecektir
Sonra Groupıd ben user_groups tablosundan yakaladı sayılar kümesi içinde group_messages tabloda yalnızca bu mesajları seçmeniz gerekir.
Bir sorgu ile bunu yapmanın bir yolu var mı? Belki ben user_groups tablosundan groupIDs bir dizi oluşturmak ve sonra dinamik bir foreach deyimi ile gibi sql sorgu oluşturmak düşündüm:
$sql = "SELECT * FROM group_messages WHERE (";
foreach ($groupID_array as $v){
$sql .= "(groupID = '$v')or";
}
$sql = rtrim($sql, 'or');
$sql .= ")";
Bu yöntem ile sorun bu kod çalıştırmak çok yavaş ve saati yapacak, hangi grupların binlerce kullanıcı ile ilişkili olabileceğini olmasıdır. Bir sorgu ile bunu yapmak için başka bir yolu var mı?