如果有人可以帮我这个,我有这些桌子我希望在两个日期之间进行所有预订,并知道其中任何一个是由别人完成还是失败。
表:登记
id | date | date_end | repeat | day_of_week | user_id | price
---------------------------------------------------------------------
1 2013-07-01 0000-00-00 1 3 1 20
2 2013-07-16 0000-00-00 1 -1 1 10
表:Bookings_done_by_other
id | date | user_id | booking_id
---------------------------------
1 2013-07-01 2 2
2 2013-07-13 2 2
表:Bookings_fail
id | date | booking_id
---------------------------
1 2013-07-01 2
2 2013-07-11 2
表:帐簿
id
--
1
....
500
这是我的查询运作良好,但我无法用它来管理我想要的所有内容。
SELECT f.date as fail, b.id, b.date, a.showdate, DATEDIFF(b.date, a.showdate) AS diff
FROM bookings as b
LEFT JOIN bookings_fail f ON (b.id = f.booking_id and DATE(f.date) = DATE(a.showdate) )
,
(
SELECT DATE_ADD('2013-07-01 00:00:00',INTERVAL Id DAY) as showdate
FROM `tally`
WHERE (DATE_ADD('2013-07-01 00:00:00',INTERVAL Id DAY) <= '2013-07-20 00:00:00')
ORDER BY Id ASC
) a
WHERE
MOD(DATEDIFF(b.date, a.showdate), b.repeat) = 0
AND
DATE(a.showdate)>= DATE(b.date)
什么时候是这样的抛出错误,在左连接中看不到a.showdate,当我在“a”表旁移动左连接时抛出错误,看不到b.id所以有什么方法可以让这个加入工作?
我想得到像这样的结果
id | showdate | fail | by_other |
-----------------------------
1 2013-07-01 NULL 2
2 2013-07-01 1 NULL //Or date
1 2013-07-03 NULL NULL
1 2013-07-04 NULL NULL
1 2013-07-05 NULL NULL
1 2013-07-06 NULL NULL
.............................
1 2013-07-20 NULL NULL
对不起,如果我的英语不太好,请提前感谢所有可以提供帮助的人。
这里有些图片希望变得清晰我无法解释我想要的东西
这是预订 Booking table
这是失败
我不能放2个以上的链接,这就是为什么这两个链接就像文本一样 所以,当我想在某个约会时预订时,会发生什么呢
s16.postimg.org/l00k1math/image.jpg
我想要做的是
s12.postimg.org/5o5hbnmdp/image.jpg
但不仅仅是用id 1预订我不会是b.id = un.booking_id然后如果有记录未能出现在最后一张图片上
感谢您的耐心
答案 0 :(得分:1)
我想我终于明白你要做什么了。我的建议是格式化你的查询:
SELECT b.id, a.showdate, f.id as fail, o.id as other
FROM (
SELECT DATE_ADD('2013-07-01 00:00:00',INTERVAL Id DAY) as showdate
FROM `tally`
WHERE (DATE_ADD('2013-07-01 00:00:00',INTERVAL Id DAY) <= '2013-07-20 00:00:00')
ORDER BY Id ASC
) a
LEFT JOIN Bookings b ON (
MOD(DATEDIFF(b.date, a.showdate), b.repeat) = 0 AND
DATE(a.showdate)>= DATE(b.date)
)
LEFT JOIN Bookings_fail f ON (
b.id = f.booking_id AND
DATE(f.date) = DATE(a.showdate)
)
LEFT JOIN Bookings_done_by_other o ON (
b.id = o.booking_id AND
DATE(o.date) = DATE(a.showdate)
)
首先从生成的 a 表中进行选择,然后将其与预订表连接起来。一旦你有两个加入,很容易加入基于a.showdate
和b.id
字段的任何其他表。
我创建了一个SQL Fiddle示例,或多或少基于您的数据,因此您可以看到它是如何工作的。 http://sqlfiddle.com/#!2/7e151/1