获取我和我的朋友参加的活动

时间:2012-07-02 09:41:46

标签: php mysql sql

希望对某些SQL有所帮助。我对MySQL很新。

如果有帮助,我正在使用Code Igniter,但通常SQL会足够好。我会忽略Active Record。

我想要使用几张桌子:

Users
id
first_name
last_name
username

Events
id
created_by_user_id
name
start_date
start_time
end_date
end_time

Attendees
id
user_id
event_id

Friends
user_id
friend_id
approved

所以,当我追求的时候是:

获取所有结果:

  • 我认可的朋友和我正在参加
  • 即将发生的事件,尚未通过end_date / end_time
  • 按start_date& START_TIME

我需要将users表加入到this中,所以我可以在View中找到类似的内容:

<?= foreach($events as $e): ?>
    <?= $e->name; ?> created by <?=$e->first_name . ' ' . $e->last_name; ?>
    Happening: <?= $e->start_date; ?>
<?php endforeach; ?>

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我建议重组事件并使用TIMESTAMP类型连接字段start_date / start_time和end_date / end_time以及开始/结束。

所以对于第一个问题:

SELECT DISTINCT a1.event_id 
 FROM Attendees a1, Attendees a2 
 WHERE  
   a1.id = a2.id  
   AND a1.user_id = ${USER_ID} 
   AND a2.user_id IN 
         (SELECT friends_id FROM 
           Friends WHERE approved = True 
           AND user_id = ${USER_ID});

或者你可以使用INTERSECT,对你来说更轻松。

第二个问题的解决方案,如果合并日期/时间属性:

SELECT id FROM Events WHERE end < NOW();

第三个查询:

SELECT id from Events ORDER BY start;