[英]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
其他一些提示:
有關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.