我对mysql相当新,所以请保持温和。我试图围绕这个任务包围我的大脑,只是不知道该去哪里。在这一点上,我的大脑很脆弱,我正在寻找指导。
我有2张桌子:表演和表演。
节目有showid,基于星期几。因此,星期一节目有白痴1,星期二节目有白痴2等等。
另一方面,表演是节目发生的具体日期。所以showid包含在表演中,并且有一个日期显示。
我要做的是,例如,列出所有星期一节目,并与所有已录制的节目进行匹配,并指出哪些节目已被报道。
所以,如果我有3个星期一的节目,并且只报告了2个与showid相对应的表演。像下面的东西......
+--------+-------+-------+------------+----------+
| showid | dayid | show | dateofshow | reported |
+--------+-------+-------+------------+----------+
| 1 | 1 | show1 | 9/07/2015 | Yes |
| 2 | 1 | show2 | NULL | NO |
| 3 | 1 | show3 | 9/07/2015 | Yes |
+--------+-------+-------+------------+----------+
... MySQL的
SELECT s.*, pr.*
FROM shows as s
LEFT JOIN performances as pr
ON s.showid = pr.showid
WHERE s.dayid = 1
再次感谢您的帮助。我的大脑被炒了。
更新:我之前没有讨论过,但是,显示日期必须在当前一周内。我已经更改了问题中的日期以更好地适应环境。在上面的“表格”中,您会注意到所报告的节目是针对2015年9月7日这是星期一。这些节目中的所有3个节目已经在2015年8月31日报道,这是前一周。所以再次,我正在寻找当前一周的dateofshow是“是”,如果dateofshow只是一个先前的日期,那么“否”。我希望这有所帮助,我相信我们已经到了那里。再次感谢您的帮助。
我试过这个......
SELECT s.showid, s.dayid, s.venueid, v.venue, v.venueid,
pr.dateofshow, IF(pr.dateofshow = DATE('2015-09-07'), 'Yes', 'No') as reported FROM shows as s JOIN venues as v ON s.venueid = v.venueid LEFT JOIN performances as pr
ON s.showid = pr.showid
WHERE s.dayid = 1
对于在设定日期有表演的节目,它为我提供了'是'。并且对于在设定日期之前的日期有表演的节目提供“否”。现在我需要消除那些早于设定日期的那些,并且如果设置日期不存在性能,则执行“否”。
答案 0 :(得分:0)
试试这个:
SELECT s.showid, s.dayid, s.show,
pr.dateofshow, IF(pr.dateofshow is null,'NO','Yes') as reported
FROM shows as s
LEFT JOIN performances as pr
ON s.showid = pr.showid
WHERE s.dayid = 1
AND pr.dateofshow > DATE_ADD(CURDATE(), INTERVAL(1-DAYOFWEEK(CURDATE())) DAY)
答案 1 :(得分:0)
不知道我是否得到了这个方面,但这是我不想尝试帮助你的。开始了。 我会尝试n:n关系来做我的判断。
SELECT *,
CASE
WHEN (dateofshow IS NOT null) AND (dateofshow BETWEEN '2015-09-07' AND '2015-09-15' )
THEN 'YES'
ELSE 'NO'
END
FROM show
JOIN show_performance ON (show.id = show_performance.Idshow)
JOIN performance ON (performance.id = show_performance.idPerformance)
创建了这样的表:
CREATE TABLE show(
id int IDENTITY(1,1) NOT NULL,
name varchar(250) NULL
CONSTRAINT [PK_Show] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE performance(
id int IDENTITY(1,1) NOT NULL,
name varchar(250) NULL
CONSTRAINT [PK_Performanse] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE show_performance(
idshow int ,
idPerformance int ,
dateofshow date null
)
ALTER TABLE show_performance WITH CHECK ADD CONSTRAINT FK_Performance FOREIGN KEY(idShow)
REFERENCES [dbo].[show] ([Id])
ALTER TABLE show_performance WITH CHECK ADD CONSTRAINT FK_show FOREIGN KEY(idPerformance)
REFERENCES [dbo].[performance] ([Id])
这是我的结果:
id name idshow idPerformance dateofshow id name (No column name)
1 rock 1 2 NULL 2 metalica NO
2 pop 2 4 NULL 4 madona NO
3 popRock 3 1 NULL 1 iron maiden NO
1 rock 1 1 2015-09-07 1 iron maiden YES
2 pop 2 3 2015-09-30 3 michael jackson NO
3 popRock 3 4 2015-10-08 4 madona NO