1

ユーザーが作成したイベントとユーザーがサインアップしたイベントを表示しようとしています。これには3つのテーブルがあります。

//events
| event_id | event_title  | event_details   | event_timestamp | userid
    1           title1        test              1234              1
    2           title2         testing2         123               2


//registration_items : event_id references events.event_id
| id | event_id | task_name 
   1       2        task 1

//registration_signup : id references registration_items.id
| id  | userid | timestamp 
   1       1        1234

これが私が持っている現在のクエリです。現在、ユーザーが作成したイベントのみが表示されます。作成されたイベントと彼がサインアップしたイベントの両方が表示されます

select events.*, registration_items.*, registration_signup.*, users.username from events
INNER JOIN users on users.userid = events.userid
LEFT JOIN registration_items ON registration_items.event_id = events.event_id
LEFT JOIN registration_signup ON registration_signup.id = registration_items.id
WHERE events.userid = '$user_id' OR registration_signup.userid = '$user_id' ORDER BY events.event_timestamp DESC

userid1の場合、出力は次のようになります。

Title
title1  (the user created this)
title2  (the user signed up for this)

userid2の場合、出力は次のようになります。

Title
title2
4

2 に答える 2

1
select events.*, registration_items.*, registration_signup.*, users.username
from events
  INNER JOIN users on users.userid = events.userid
  LEFT JOIN registration_items ON registration_items.event_id = events.event_id
  LEFT JOIN registration_signup ON registration_signup.id = registration_items.id
WHERE registration_signup.userid = '$user_id'

union

select events.*, registration_items.*, registration_signup.*, users.username
from events
  INNER JOIN users on users.userid = events.userid
  INNER JOIN registration_items ON registration_items.event_id = events.event_id
  INNER JOIN registration_signup ON registration_signup.id = registration_items.id
WHERE events.userid = '$user_id'

ORDER BY events.event_timestamp DESC
于 2013-01-11T20:06:11.287 に答える
0

サンプルデータにタイプミスがあると推測するのが正しいかどうかはわかりません。クエリは、両方のイベント、サインアップしたイベントのユーザーIDを1に変更した瞬間に機能するため、このリファレンスデモを見て、タイプミスでない場合はコメントしてください...

クエリ:(クエリ..)

select u.userid,e.event_id as id,  
ri.event_id as evt, e.event_title, 
ri.task_name,
rs.timestamp, 
u.name from events e
INNER JOIN users u on 
u.userid = e.userid
LEFT JOIN registration_items ri ON 
ri.event_id = e.event_id
LEFT JOIN registration_signup rs ON 
rs.id = ri.id
WHERE e.userid = '1' or
rs.userid = '1' 
ORDER BY e.event_timestamp DESC
;

結果:

| USERID | ID | EVT | EVENT_TITLE | TASK_NAME | TIMESTAMP | NAME |
------------------------------------------------------------------
|      1 |  1 |   1 |      title1 |    task 1 |      1234 | john |
|      1 |  2 |   2 |      title2 |  task 1.2 |      3456 | john |
于 2013-01-11T20:45:57.557 に答える