Php SQL获取给定日期下一次出现的日期戳
我有以下SQL查询:Php SQL获取给定日期下一次出现的日期戳,php,mysql,sql,Php,Mysql,Sql,我有以下SQL查询: SELECT * FROM tbl_clubs c LEFT JOIN tbh_club_classes cc ON c.clubID = cc.clubID LEFT JOIN tbl_classes cl ON cl.classID = cc.classID 它返回这样的数据 Array ( [0] => Array ( [clubID] => [clubName] => Cl
SELECT
*
FROM
tbl_clubs c
LEFT JOIN tbh_club_classes cc
ON c.clubID = cc.clubID
LEFT JOIN tbl_classes cl
ON cl.classID = cc.classID
它返回这样的数据
Array
(
[0] => Array
(
[clubID] =>
[clubName] => Club 1
[clubLocation] => Clyme Hall
[clubPostcode] =>
[classID] => 2
[classType] => Kickboxing
[classStart] => 17:00
[classEnd] => 19:00
[classNight] => Monday
[classAudience] => Mixed
[classCost] => 5.00
)
[1] => Array
(
[clubID] => 1
[clubName] => club 2
[clubLocation] => Sports Hall
[clubPostcode] =>
[classID] => 3
[classType] => Karate / Judo
[classStart] => 19:30:00
[classEnd] => 21:00:00
[classNight] => Friday
[classAudience] => Mixed
[classCost] => 5.00
)
)
我希望classNight返回classNight中存储的工作日、一个月中的某一天以及下一天发生的月份,以便从查询中得到类似的结果
Array
(
[0] => Array
(
[clubID] =>
[clubName] => Club 1
[clubLocation] => Clyme Hall
[clubPostcode] =>
[classID] => 2
[classType] => Kickboxing
[classStart] => 17:00
[classEnd] => 19:00
[classNight] => **Mon 26th Oct**
[classAudience] => Mixed
[classCost] => 5.00
)
[1] => Array
(
[clubID] => 1
[clubName] => club 2
[clubLocation] => Sports Hall
[clubPostcode] =>
[classID] => 3
[classType] => Karate / Judo
[classStart] => 19:30:00
[classEnd] => 21:00:00
[classNight] => **Fri 21st Oct**
[classAudience] => Mixed
[classCost] => 5.00
)
)
我想修改我的查询以获得上面所需的结果。现在发生的是classNight字段,它是一种varcar格式,保存类所在的星期几,我希望它返回classNight中存储的星期几、月份和第二天的月份
我已经用php完成了这段代码
$day = $row['classNight'];//ie Monday, Tuesday etc
$today = strtotime('today 00:00:00');
$date = strtotime($day."+1",$today);
$date1 = date("D d M",$date);
但我需要弄清楚如何在SQL查询中实现这一点
编辑
也许不需要返回月日/周日和月日的查询,只需返回存储在classNight字段中的下一天实例的日期戳,然后我就可以使用php以我需要的格式显示它,这对每个人来说都更容易:)
我已找到此代码,但无法使其正常工作
SELECT * (NEXT_DAY(SYSDATE,`classNight`) "NEXT DAY") AS dates
FROM tbl_classes;
我不确定这是否会给我时间戳,但应该给我日期/月/年;任何人都能看到上面的错误以及我如何将其合并到我的查询中吗?数据库中日期列的数据类型是什么?如果是DATETIME或DATE,则可以采用以下方法。使用PHP以表存储的相同格式获取今天的日期。然后在查询的条件下使用相同的
SELECT
*
FROM
tbl_clubs c
LEFT JOIN tbh_club_classes cc
ON c.clubID = cc.clubID
LEFT JOIN tbl_classes cl
ON cl.classID = cc.classID
WHERE DATE(tablename.datecolumn) > $ date_variable
这将为您提供从明天开始的课程。记住一件事,在MySQL中,我们只能比较日期,但不能比较时间。同样,我不知道您使用哪种格式来保存日期,因此它将仅以存储日期的相同方式显示。但是在得到结果之后,我们仍然可以使用PHP格式化它 数据库中日期列的数据类型是什么?如果是DATETIME或DATE,则可以采用以下方法。使用PHP以表存储的相同格式获取今天的日期。然后在查询的条件下使用相同的
SELECT
*
FROM
tbl_clubs c
LEFT JOIN tbh_club_classes cc
ON c.clubID = cc.clubID
LEFT JOIN tbl_classes cl
ON cl.classID = cc.classID
WHERE DATE(tablename.datecolumn) > $ date_variable
这将为您提供从明天开始的课程。记住一件事,在MySQL中,我们只能比较日期,但不能比较时间。同样,我不知道您使用哪种格式来保存日期,因此它将仅以存储日期的相同方式显示。但是在得到结果之后,我们仍然可以使用PHP格式化它 如果我理解正确,您希望找到一周中某一天的第二天:
SELECT *,
(curdate + interval (case when field(dow, 'Sunday', . . . , 'Sunday') >= dayofweek(curdate)
then field(dow, 'Sunday', . . . , 'Sunday') - dayofweek(curdate)
else 7 + field(dow, 'Sunday', . . . , 'Sunday') - dayofweek(curdate)
end) day
) as next_class_day
FROM tbl_clubs c LEFT JOIN
tbh_club_classes cc
ON c.clubID = cc.clubID LEFT JOIN
tbl_classes cl
ON cl.classID = cc.classID;
如果我理解正确,您希望找到一周中某一天的第二天:
SELECT *,
(curdate + interval (case when field(dow, 'Sunday', . . . , 'Sunday') >= dayofweek(curdate)
then field(dow, 'Sunday', . . . , 'Sunday') - dayofweek(curdate)
else 7 + field(dow, 'Sunday', . . . , 'Sunday') - dayofweek(curdate)
end) day
) as next_class_day
FROM tbl_clubs c LEFT JOIN
tbh_club_classes cc
ON c.clubID = cc.clubID LEFT JOIN
tbl_classes cl
ON cl.classID = cc.classID;
“这可以在查询本身中实现吗?”是的,当然可以。抱歉,这并不意味着讽刺,但您可以在PHP或MYSQL中进行,但您应该包含一些额外的示例数据和所需的结果。因为不清楚你是否需要每周处理一次,或者每月处理一次,每两周,每周处理两次,等等。嗨,马特,我已经更新了我的问题,希望能让它更容易理解。我只需要一周中的某一天,一个月中的某一天,以及classNight day的下一个实例的月份数据。因此,如果classNight字段是星期一,而今天是9月29日星期四,那么我希望sql获取即将到来的星期一信息(10月3日星期一)。希望这有助于了解夏季/冬季停车期间会发生什么?这些事情通常不是一年中每周都发生。您可能最好将实际日期存储在类中(尽管类不足以在同一个表中),并为每个类选择最近的未来日期。信不信由你,我们每周都会进行,因为人们知道他们在哪里。我明白你的意思。我只是想知道,如果我要存储每个类和日期,我将如何保持类数据库的更新,因为我需要以这种方式定期添加新类,并且知道我的内存,我可能会忘记更新它。“这可以在查询本身内实现吗?”是的,当然可以。抱歉,这并不意味着讽刺,但您可以在PHP或MYSQL中进行,但您应该包含一些额外的示例数据和所需的结果。因为不清楚你是否需要每周处理一次,或者每月处理一次,每两周,每周处理两次,等等。嗨,马特,我已经更新了我的问题,希望能让它更容易理解。我只需要一周中的某一天,一个月中的某一天,以及classNight day的下一个实例的月份数据。因此,如果classNight字段是星期一,而今天是9月29日星期四,那么我希望sql获取即将到来的星期一信息(10月3日星期一)。希望这有助于了解夏季/冬季停车期间会发生什么?这些事情通常不是一年中每周都发生。您可能最好将实际日期存储在类中(尽管类不足以在同一个表中),并为每个类选择最近的未来日期。信不信由你,我们每周都会进行,因为人们知道他们在哪里。我明白你的意思。我只是想知道,如果我要存储每个类和日期,我将如何保持类数据库的更新,因为我需要以这种方式定期添加新类,并且知道我的内存,我可能会忘记更新它。嗨,谢谢你的回答,不幸的是,我无法让它工作,因为它一直在说mysqli_num_rows()期望参数1是给定的mysqli_结果。我已经更新了我的问题,希望能更好地解释。@BBLJ84。间隔天数的关键字是
day
;我有天
。我现在得到了#1064-您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在“..”附近使用的正确语法星期日“>=星期一(副馆长)然后是第二行的第二天???任何想法,thanks@BBLJ84 . . . …
意味着填写一周中剩余的几天。好的,我已经让它工作了,但是它没有产生我想要的结果,这里是结果的一行。[c]