Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 两个其他日期之间的日期,不考虑年份_Php_Mysql_Date_Between - Fatal编程技术网

Php 两个其他日期之间的日期,不考虑年份

Php 两个其他日期之间的日期,不考虑年份,php,mysql,date,between,Php,Mysql,Date,Between,我正在寻找一个像那个人一样的东西,只是我想使用MySQL。下表是您可以在我的数据库中找到的(简化) 首先,条目必须是随机的,而不是id 4,我只想要一个条目。我算出了:SELECT*FROM test WHERE id 4 ORDER BY rand()LIMIT 1 在该表中,“first”和“last”列是格式为mmdd的日期(两个整数)。因此,约翰一年中大部分时间都在工作;从10月20日到8月14日。另一方面,Zara只在一小段时间内可用;12月1日至12月19日 我的问题:如何将查询更改

我正在寻找一个像那个人一样的东西,只是我想使用MySQL。下表是您可以在我的数据库中找到的(简化)

首先,条目必须是随机的,而不是id 4,我只想要一个条目。我算出了:
SELECT*FROM test WHERE id 4 ORDER BY rand()LIMIT 1

在该表中,“first”和“last”列是格式为mmdd的日期(两个整数)。因此,约翰一年中大部分时间都在工作;从10月20日到8月14日。另一方面,Zara只在一小段时间内可用;12月1日至12月19日

我的问题:如何将查询更改为仅选择可用人员?我不能用'between',因为在约翰的例子中,1020和0814之间没有任何东西

我就是不明白,肯定还有其他人也有类似的问题。。。有人有解决办法吗


亲切问候

您需要区分两种情况

  • 第一次
    时,日期在同一年。然后,您可以在之间使用
    来匹配日期


  • first>last
    时,表示
    last
    在下一年。在这种情况下,匹配的日期是
    date>=first或date=first或date,因此
    first
    last
    存储为整数而不是日期?为什么第一个值在最后一个值之后?在这种情况下,您如何知道搜索first>last或last>first?我还假设您的意思是10月20日。如果您首先将“日期”转换为实际的MySQL
    DATE
    值,则可以使用
    BETWEEN
    。您可以使用:
    STR\u TO\u DATE(第一个,'%m%d')
    。但问题仍然存在@AndyG notes@GreatBigBore最后加10000是不够的。在约翰的例子中,0101应该考虑在1020和0814之间,但它不是在1020和10814之间。特例不应该是最后一个和第一个之间的
    ,因为在特例中
    最后一个
    。@GreatBigBore在1020和0814之间没有数字。不过,我确实把比较的方向弄错了。我已经修好了,好的。我想你是想把调整后的年份值附加到日期上。@AnyG&Tomas Creemers:我想到了这一点,但据我所知str_to_date()只格式化日期。。。然后我还要加上一年,因为没有只保存mmdd的字段类型。。。就我而言,从理论上讲,这种情况一直持续到现在,已经没有一年了@因此,当使用php时,我的查询将变成:
    SELECT*FROM test WHERE id 4和(IF(first=first或$date
    
    +------+------+------+------+
    | id   | name | first| last |
    +------+------+------+------+
    |    1 | John | 1020 | 0814 |
    |    2 | Ram  | 0827 | 0420 |
    |    3 | Jack | 0506 | 0120 |
    |    4 | Jill | 0405 | 0220 |
    |    5 | Zara | 1201 | 1219 |
    +------+------+------+------+
    
    WHERE IF(first < last, @date BETWEEN first AND last,
                           @date >= first OR date <= last)