【问题标题】:Use multiple tables to find a record MySQL使用多个表查找记录 MySQL
【发布时间】:2013-08-25 19:05:27
【问题描述】:

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

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

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

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

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

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

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

是否有可以处理该工作的查询? :)

【问题讨论】:

  • 听说过JOIN吗?
  • 我还没有,抱歉,这能行吗? :)
  • 是的。 JOIN 是您所需要的。 googlemysql join tutorial 方便理解。
  • 您是否认为可以使用我上面提供的信息给我一个示例来说明我将如何做到这一点? :)

标签: php mysql sql


【解决方案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

【讨论】:

  • 这似乎完美无缺!谢谢,这肯定给了我一些工作的机会^^
【解决方案2】:
SELECT * FROM events e , registrations r where e.eventid = r.eventid AND e.Date < CURRENT_DATE()

【讨论】:

    【解决方案3】:
    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。

    【讨论】:

      【解决方案4】:

      Example Select with a join with your information:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          使用JOIN,您可以为userid 选择registrations 行,然后获取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-09-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-18
            • 1970-01-01
            • 2020-07-06
            相关资源
            最近更新 更多