2013-08-25 44 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 
相關問題