1

状況は次のとおりです。関連する行があるテーブルがあります...

contact
-- contact_id

event
-- event_id
-- event_group_id

groups
-- group_id

groupmember
-- group_id
-- contact_id

attendance
-- contact_id
-- group_id
-- event_id
-- timestamp (current timestamp)



//Query the database for group members 
$result = mysql_query(
"SELECT contact.contact_id, contact.first, contact.last, 
  contact.home_phone, contact.mobile_phone, contact.email, contact.address, 
  contact.city, contact.state, contact.zip 
FROM contact 
INNER JOIN groupmember ON contact.contact_id = groupmember.contact_id 
WHERE groupmember.group_id = '$groupid' 
ORDER BY last
    "); 

私がやりたいのは、「出席」という名前のテーブルをチェックし、過去6か月間にグループ「$ group」が主催するイベントに参加した結果のみを表示して、これらの結果をトリミングすることです。

次に、これらの結果が表示された後、ページの下部に別のリストを生成して、「$group」が主催するイベントに最後に参加したのが6か月以上前であるために「非アクティブ」である連絡先を示します。別のWHEREステートメントに出席テーブルを含むINNERJOINを追加する必要があると思いますが、それができるかどうかさえわかりません。

これをどのように達成できるかについてのアイデアはありますか?

4

1 に答える 1

0

なぜあなたも出席テーブルに参加できないのですか?

その場合は、contact_idでGROUP BYを実行し、MAX(タイムスタンプ)を取得します。これを使用して、最初の質問に答えることができます。

 MAX(timestamp) >= datesub(now(), interval 6 month)

そしてあなたの2番目:

 MAX(timestamp) < datesub(now(), interval 6 month)

2番目の質問は、以前にイベントに参加したことがある人を対象としているため、出席テーブルに行が存在することが保証されていることに注意してください。それを述べておらず、連絡先に出席記録がない可能性がある場合は、OUTERJOINを使用する必要があります。

幸運を。

于 2012-09-11T15:58:47.193 に答える