2017-09-16 72 views
0

我有3個表格。用戶表。一張詩表。一張表格,用於跟蹤哪些詩歌通過電子郵件發送給用戶。需要SQL幫助 - 跟蹤發送的電子郵件

tblUser | tblEmailed | tblPoems 
------- | ----------- | -------- 
userid | userid  | poemid 
username | poemid  | poemname 
etc  | date  | etc 

我想寫一個MySQL查詢其選擇尚未通過電子郵件發送了一首詩今天並選擇他們之前沒有收到poemid用戶ID。

有人可以幫助我嗎?

+0

見https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an -mcve-for-what-looks-to-me-to-a-very-simple-sql-query – Strawberry

回答

0

我決定去與這個認識我不能將它與一個查詢後:

SELECT * FROM tblUser U 
LEFT JOIN tblEmailed E ON E.userid = U.userid AND E.date = CURDATE() 
WHERE E.userid IS NULL 
LIMIT 1 

SELECT * FROM tblPoems P 
LEFT JOIN tblEmailed E ON E.poemid = P.poemid AND E.userid = :userid 
WHERE E.poemid IS NULL 
LIMIT 1 
+0

你可以用一個查詢來做到這一點 – Strawberry

+0

草莓,請賜教。 – Scotty

+0

查看我的評論到您原來的帖子 – Strawberry

0

您需要做的第一件事是確定一個今天還沒有通過電子郵件發送的用戶。要做到這一點,你可以使用類似以下內容:

SELECT u.userid FROM tblUser u LEFT JOIN tblemailed e on e.userid = u.userid WHERE e.date == CURDATE() AND COALESCE(e.poemid, '') == '' LIMIT 1

然後,我們需要的是,爲了找到一首詩,他們還沒有收到user_id

SELECT p.poemid FROM tblPoems p WHERE p.poemid NOT IN (SELECT poemid FROM tblEmailed WHERE userid == user_id) LIMIT 1

其中user_id是該用戶來自第一個查詢。

+0

或者只是使用正確的加入類型 – Strawberry

+0

請注意'LEFT JOIN x ... WHERE x = .. .'與INNER JOIN x'相同,而沒有ORDER BY的LIMIT是毫無意義的 – Strawberry

+0

他/她要求一個結果,並且似乎是SQL的新成員,因此是'LIMIT'。 – 0x11