Php 使用多个表查找记录MySQL

Php 使用多个表查找记录MySQL,php,mysql,sql,Php,Mysql,Sql,如果标题有误,我很抱歉,但我不知道如何总结,对不起: 基本上,我已经制作了一个活动系统,显示您可以参加的活动。 我有两张桌子 活动和登记 事件表包含有关单个事件、事件日期时间、价格等的所有信息 每当用户在事件上单击register时,都会向注册表中添加一条记录。 记录如下所示:Registrationid、eventid、日期、状态和用户ID 现在,我使用此查询获取所有传递的事件: SELECT * FROM events WHERE Date < CURRENT_DATE() ORDER

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

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

活动和登记 事件表包含有关单个事件、事件日期时间、价格等的所有信息

每当用户在事件上单击register时,都会向注册表中添加一条记录。 记录如下所示:Registrationid、eventid、日期、状态和用户ID

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

SELECT * FROM events WHERE Date < CURRENT_DATE() ORDER BY Date ASC
我只希望它在用户页面上显示以前的事件,如果用户确实参加了该事件。是否有办法检查注册表,以及是否存在该事件的记录;展示活动?我可以通过php来实现这一点,但我认为通过MySQL是可能的,尽管我不能完全确定

是否有可以处理作业的查询?:

SELECT * FROM events e , registrations r where e.eventid = r.eventid AND e.Date < CURRENT_DATE()

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

示例使用连接选择您的信息:

SELECT * FROM events AS e WHERE e.Date < CURRENT_DATE() JOIN registration AS r ON e.id = r.eventid ORDER BY e.Date ASC

尽管其他评论者建议使用连接,这是一个不错的建议,但我认为在这种情况下使用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。

使用联接,您可以为用户ID选择注册行,然后获取事件数据


当然,这是一个非常简单的连接操作。我会这样做:

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
还有几个其他提示:

避免使用保留字和数据类型作为列名,例如日期 MySQL中的默认存储引擎不支持引用完整性。如果您需要引用完整性,请查看InnoDB。
有关MySQL中的连接的更多信息,请查看:

听说过吗?对不起,我还没有听说过,这能行吗是的。加入是你需要的。谷歌mysql加入教程便于理解。你认为可以用我上面提供的信息给我举个例子说明我将如何做到这一点吗这似乎是完美的工作!谢谢你,这确实给了我一些可以合作的东西^^
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
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