2013-08-25 19 views
0

我很抱歉,如果标题是missleading,但我不知道如何来概括,对不起:(使用多个表来查找记录的MySQL

基本上,我做了一个事件系统表明你可以参加活动。 我有两个表

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

每次用户点击一个事件的注册,一个记录被添加到注册表中。 记录外观就像这样:Registrationid,事件ID,日期,状态和用户ID

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

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

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

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

+0

听说过的[JOIN](http://dev.mysql.com/doc/refman/5.0/en/join.html) ? –

+0

我还没有,对不起,这会做这份工作吗? :) – Jazerix

+0

你可以使用连接 –

回答

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. 避免使用保留字和数据类型的列名(如“DATE”)
  2. 默认存储引擎MySQL不支持参照完整性。如果您需要参考完整性,请查看InnoDB。

更多关于MySQL的加入,检查了这一点:https://dev.mysql.com/doc/refman/5.0/en/join.html

+0

这似乎是无懈可击的工作!谢谢,这肯定给了我一些与^^合作的东西 – Jazerix

1
SELECT * FROM events e , registrations r where e.eventid = r.eventid AND e.Date < CURRENT_DATE() 
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 

该查询会给你从事件表,其中在注册表中的记录有特定的用户ID的所有字段。

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 
0

尽管其他评论者建议使用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替换...)。

0

使用JOIN,您可以选择registrations行为userid,然后拿到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 
相关问题