gpt4 book ai didi

Mysql查询左连接访问变量

转载 作者:行者123 更新时间:2023-11-29 13:45:22 24 4
gpt4 key购买 nike

如果有人可以帮助我解决这个问题,我已经有了这些表格,我想获取两个日期之间的所有预订,并了解其中是否有任何预订是由其他人完成的,或者是否失败。

表格:预订

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

这是失败的

Fail table

我不能放置超过 2 个链接,这就是为什么这两个链接就像文本一样那么当我想获得某个日期的预订时会发生什么我这样做

s16.postimg.org/l00k1math/image.jpg

我想做的是

s12.postimg.org/5o5hbnmdp/image.jpg

但不仅仅是对于 id 1 的预订,我不会是 b.id = un.booking_id,然后如果有未能出现的记录,最后一张图片是怎样的

感谢您的耐心等待

最佳答案

我想我终于明白你想做什么了。我的建议是像这样设置查询格式:

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.showdateb.id 字段连接任何其他表。

我创建了一个 SQL Fiddle 示例,或多或少基于您的数据,因此您可以了解它是如何工作的。 http://sqlfiddle.com/#!2/7e151/1

关于Mysql查询左连接访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17494747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com