簡體   English   中英

使用多個表來查找MySQL記錄

[英]Use multiple tables to find a record MySQL

我很抱歉,如果標題是誤導,但我不知道如何總結,抱歉:(

基本上,我制作了一個活動系統,展示了你可以參加的活動。 我有兩張桌子

“事件”和“注冊”事件表包含有關單個事件,事件的日期時間,價格等的所有信息......

每當用戶單擊事件上的注冊時,記錄就會添加到注冊表中。 記錄如下所示:Registrationid,eventid,date,status和userid

現在我使用此查詢來獲取所有傳遞的事件:

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()

當然,這是一個非常簡單的連接操作。 這是我將如何做到這一點:

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

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。

示例選擇包含您的信息的聯接:

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

盡管其他評論者建議使用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替換... )。

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM