2017-09-16 74 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