0

グループおよびグループ メンバーシップ機能で作業しています

関連するテーブルは次のとおりです。

usuarios (id、first_name、last_name、...)

グループ (id、名前、..、id_user)

group_members (id、id_group、id_user)

このデザインでは、グループ テーブル (groups.id_user が作成者) から作成者を取得し、group_members (group_members.id_usuario) からメンバーを取得する必要があります。

今のところ、私は2つのクエリでしか達成できませんでした:

/* Retrieve members */
$q = 'SELECT usuarios.id as uid, usuarios.avatar, usuarios.first_name,usuarios.last_name 
                  FROM usuarios LEFT JOIN group_members ON usuarios.id = group_members.id_user
                  WHERE group_members.id_group = '.$this->id.'';
$r =  cache_query($q,'',10);
/* Retrive creator */           
$q2 = 'SELECT usuarios.id as uid, usuarios.avatar, usuarios.first_name,usuarios.last_name
                   FROM usuarios LEFT JOIN groups ON usuarios.id = groups.id_user
                   WHERE groups.id = '.$this->id;
$r2 =  cache_query($q2,'',10);

単一のクエリでそれを達成する方法はありますか? (作成者をメンバーとして挿入し、最初のクエリのみを使用することも考えていました)

4

2 に答える 2

3

テーブルに 2 回参加するusuariosと、メンバーとグループ作成者の両方の情報を同時に取得できます。

select u.id as uid,
    u.avatar,
    u.first_name,
    u.last_name,
    uc.id as creator_uid,
    uc.avatar as creator_avatar,
    uc.first_name as creator_first_name,
    uc.last_name as creator_last_name
from groups g
inner join group_members gm on g.id = gm.id_group
left outer join usuarios u on gm.id_user = u.id
left outer join usuarios uc on g.id_user = uc.id
where g.id = ...
于 2012-07-24T13:44:15.783 に答える
0

両方のクエリを組み合わせて、句にOR条件を追加する必要があります。WHERE

SELECT usuarios.id as uid, usuarios.avatar, usuarios.first_name,usuarios.last_name
FROM usuarios
     LEFT JOIN group_members
        ON usuarios.id = group_members.id_user
     LEFT JOIN groups
        ON usuarios.id = groups.id_user
WHERE (group_members.id_group =  '.$this->id.' OR groups.id = '.$this->id)
于 2012-07-24T13:45:47.693 に答える