1

私は次のクエリを持っています:

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position FROM users a groups_members b, WHERE a.uid = b.userid AND b.group_id=$group_var

これはうまく機能し、すべてのユーザーの情報と、私が呼び出したい特定のグループのグループ内でのユーザーの位置を返します。グループがイベントに参加するとき、そのイベントページで、上記の関数を呼び出しますが、そのユーザーが確認されているかどうかを確認する追加のステートメントも呼び出します。だから私は次のクエリを実行します:

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed FROM users a groups_members b, event_users c WHERE a.uid = b.userid AND b.group_id='$group_var' and c.event_id ='$event_var' and a.uid = c.userid

これもうまく機能しますが、ここで問題が発生します。特定のグループがイベントを作成し、その後、すべてのユーザーがevent_usersテーブルにダンプされたと仮定します。2番目のクエリは引き続き機能し、そのグループ内のすべてのユーザーとそのユーザーおよび確認済みの設定が表示されますが、新しいユーザーがグループに参加して自分の位置を選択すると、その新しいユーザーは2番目のクエリでは返されません。すべてのユーザーとその位置を表示するイベントでは、イベントの作成後に追加された新しいユーザーは考慮されません。

それがあまり混乱しないように聞こえることを願っています。これが私のテーブルです:

event_users || id, event_id, userid, confirmed    

groups_members || id, userid, group_id, position

users || uid, name_f, name_l, profile

私の質問は、基本的に現在のすべてのグループメンバーを収集し、その後、それらがevent_usersテーブルに入力されている場合、それらの確認済みステータスをどのように収集できるかです。新しいユーザーを説明し、グループが持っているイベントにそれらを入れるグループページでクエリを実行したくありません

4

1 に答える 1

2

左結合を使用します。

    SELECT 
      a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed 
    FROM users a 
    JOIN groups_members b on a.uid = b.userid
    LEFT JOIN event_users c on a.uid = c.userid
    WHERE b.group_id='$group_var' and c.event_id ='$event_var'

event_usersテーブルに対応するレコードがない場合、c.confirmedの値としてNULLを取得します。Coalesce()関数を使用して、デフォルト値を設定できます。

     coalesce(c.confirmed, 0)

また

     coalesce(c.confirmed, 'not subscribed yet')
于 2012-04-25T18:41:49.707 に答える