0

如果标题误导,我很抱歉,但我不知道如何总结,对不起:(

基本上,我制作了一个活动系统,显示您可以参加的活动。我有两张桌子

“事件”和“注册”事件表包含有关单个事件、事件日期时间、价格等的所有信息...

每次用户单击事件注册时,都会在注册表中添加一条记录。一条记录如下所示:Registrationid、eventid、date、status 和 userid

现在我使用这个查询来获取所有传递的事件:

SELECT * FROM events WHERE Date < CURRENT_DATE() ORDER BY Date ASC

如果用户实际参加了活动,我只希望它在用户页面上显示以前的活动。有没有办法可以检查注册表,以及该事件是否存在记录;显示事件?我可以做到这一点是 php,但我认为可以通过 MySQL,尽管我不完全确定。

有没有可以处理这项工作的查询?:)

4

6 回答 6

1
SELECT * FROM events e , registrations r where e.eventid = r.eventid AND e.Date < CURRENT_DATE()
于 2013-08-25T19:11:54.440 回答
1

当然,这是一个非常简单的连接操作。这是我将如何做到这一点:

select e.*
from event e join registration r
on (r.event_id=e.event_id)
where r.user_id=123 and e.date < current_date()
order by e.date asc

其他几个提示:

  1. 避免使用保留字和数据类型作为列名(例如“日期”)
  2. MySQL 中的默认存储引擎不支持引用完整性。如果您需要参照完整性,请查看 InnoDB。

有关 MySQL 中连接的更多信息,请查看:https ://dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-08-25T19:15:21.777 回答
0
SELECT e.*
FROM events e
JOIN registrations r
ON e.eventid = r.eventid
WHERE Date < CURRENT_DATE()
AND r.userid = <insert id here>
ORDER BY Date ASC

此查询将为您提供events表中的所有字段,其中registrations表中的记录具有特定的用户 ID。

于 2013-08-25T19:12:28.793 回答
0

示例选择并加入您的信息:

SELECT * FROM events AS e WHERE e.Date < CURRENT_DATE() JOIN registration AS r ON e.id = r.eventid ORDER BY e.Date ASC
于 2013-08-25T19:13:17.917 回答
0

尽管其他评论者建议使用 a JOIN(这是一个不错的建议),但我认为在这种情况下使用IN加上子查询实际上更好:

SELECT *
  FROM events
 WHERE eventid IN
        ( SELECT r.eventid
            FROM registrations r
           WHERE r.userid = ...
        )
   AND date < CURRENT_DATE()
 ORDER
    BY date ASC

(用...适当的用户 ID 替换)。

于 2013-08-25T19:13:44.500 回答
0

使用 a JOIN,您可以选择 的registrationsuserid,然后获取events数据

SELECT 
    r.*, // Instead of *, you could specify the columns -  r.userid, r.status, etc
    e.* // Instead of *, you could specify the columns - e.event_name, e.Date, etc
FROM 
    registrations r
JOIN 
    events e
ON
    r.eventid = e.id
WHERE
    r.userid = YOUR_USERID
AND
    r.status = ATTENDED
AND
    e.Date < CURRENT_DATE() 
ORDER BY 
    e.Date ASC
于 2013-08-25T19:14:58.567 回答