Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL获取给定日期下一次出现的日期戳_Php_Mysql_Sql - Fatal编程技术网

Php 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

我有以下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] => 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]