【发布时间】:2014-05-06 12:32:37
【问题描述】:
我当前的表格如下所示:
Lessons:
+-----------------------------------+
| ID | Name | StartDate | Repeats |
|----|-------|------------|---------|
| 1 | Maths | 2014-05-05 | 5 |
| 2 | Lunch | 2014-05-05 | 1 |
| 3 | Comp | 2014-05-05 | 7 |
+-----------------------------------+
LessonTimes:
+-------------------------------------+
| ID | LessonID | StartTime | EndTime |
|----|----------|-----------|---------|
| 1 | 1 | 10:00:00 | 5 |
| 2 | 2 | 12:25:00 | 1 |
| 3 | 3 | 14:00:00 | 7 |
+-------------------------------------+
Tally:
+----+
| ID |
|----|
| 1 |
| 2 |
| . |
| . |
+----+
我有在特定开始日期的特定天数内重复的事件。我目前的查询是:
SELECT E.ID
, E.Name
, E.StartDate
, E.Repeats
, A.ShowDate
, DATEDIFF(E.StartDate, A.ShowDate) diff
, T.StartTime
, DATE_ADD(A.ShowDate, INTERVAL T.StartTime HOUR_SECOND) ShowTime
FROM Planner_Lessons E
, ( SELECT DATE_ADD('2014-05-05 00:00:00',INTERVAL ID DAY ) ShowDate
FROM `Planner_Tally`
WHERE (DATE_ADD('2014-05-05 00:00:00',INTERVAL ID DAY )<= '2014-05-30 00:00:00')
ORDER
BY Id ASC
) A
LEFT
JOIN Planner_LessonTimes T
ON T.LessonID = E.ID
WHERE MOD(DATEDIFF(E.StartDate, A.ShowDate), E.Repeats) = 0
AND A.ShowDate >= E.StartDate
但我得到的错误是在“ON”子句中找不到字段E.ID。
我发现查询的原始问题在这里 - PHP/MySQL: Model repeating events in a database but query for date ranges
【问题讨论】:
-
我认为你离开了
A表,所以你不能设置条件T.LessonID=E.ID -
Planner_lessons 和 A 没有 on 子句或内/外连接语法
-
不要混合隐式(逗号)和显式连接语法。事实上,根本不要使用隐式连接语法。另外,我怀疑将 'id' 与 DATEDIFF('2014-05-30 00:00:00','2014-05-05 00:00:00') 的结果进行比较会更有效
标签: mysql sql datetime inner-join repeat