0

只是希望对一些 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 排序

我需要将用户表加入到这个表中,这样我就可以在视图中拥有这样的东西:

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

谢谢!!

4

1 回答 1

0

首先,我建议重组事件并将字段 start_date/start_time 和 end_date/end_time 与 TIMESTAMP 类型的 start/finish 连接起来。

所以对于第一个问题:

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;
于 2012-07-02T10:12:18.860 回答