Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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 - Fatal编程技术网

Php 如何在两个日期之间一次选择一条记录

Php 如何在两个日期之间一次选择一条记录,php,mysql,Php,Mysql,我有一个存储房间预订的表,对于我想要的每个房间,按PHP日期选择预订。以下是查询: SELECT id_prenotazione, id_alloggio, FROM_UNIXTIME(data_checkin,'%d/%m/%Y') AS checkin, FROM_UNIXTIME(data_checkout,'%d/%m/%Y') AS checkout, pagata, esclusiva FROM prenotazioni WHERE id_alloggio = $id_allo

我有一个存储房间预订的表,对于我想要的每个房间,按PHP日期选择预订。以下是查询:

SELECT id_prenotazione, id_alloggio, FROM_UNIXTIME(data_checkin,'%d/%m/%Y') AS checkin,
  FROM_UNIXTIME(data_checkout,'%d/%m/%Y') AS checkout, pagata, esclusiva
FROM prenotazioni 
WHERE id_alloggio = $id_alloggio
  AND FROM_UNIXTIME(data_checkin,'%d/%m/%Y') >= ".$data."
  OR FROM_UNIXTIME(data_checkout,'%d/%m/%Y') <= " .$data.") 
ORDER BY checkin ASC
LIMIT 1;
从UNIXTIME(数据签入,'%d/%m/%Y')中选择id_prenotazione,id_allogio作为签入,
从作为签出的\u UNIXTIME(数据\u签出,'%d/%m/%Y')、pagata、esclusiva
来自prenotazioni
其中id_allogio=$id_allogio
和来自_UNIXTIME(数据_签入,'%d/%m/%Y')>=“$data。”

或者从_UNIXTIME(数据_checkout,'%d/%m/%Y')为什么不使用between语句:

SELECT col1,col2,col3,col4,blabla 
FROM prenotazioni 
WHERE 
id_alloggio = $id_alloggio 
and FROM_UNIXTIME(data_checkin,'%d/%m/%Y') between date_1 AND date_2
ORDER BY checkin ASC
LIMIT 1;

你的问题使你很难准确说出你需要什么。似乎您需要查看在特定日期与特定房间匹配的单个预订

但是你没有告诉我们如果一天有多个房间的预订会发生什么。也就是说,如果出现超额预订,您不会告诉我们应该发生什么

无论如何,处理
时间戳
(即UNIXTIME)数据项的方案不是很好

我建议您修改您的查询如下:

SELECT id_prenotazione,
       id_alloggio,
       FROM_UNIXTIME(data_checkin,'%d/%m/%Y') AS checkin,    
       FROM_UNIXTIME(data_checkout,'%d/%m/%Y') AS checkout, 
       pagata, 
       esclusiva
  FROM prenotazioni 
 WHERE id_alloggio = $id_alloggio 
   AND STR_TO_DATE($data, '%d/%m/%Y') >= data_checkin
   AND STR_TO_DATE($data, '%d/%m/%Y') <  data_checkout + INTERVAL 1 DAY
 ORDER BY checkin ASC
这是因为您似乎在使用包含日历日期和时间的
data\u checkin
data\u checkout
数据类型。当
data\u checkout
显示的是午夜以外的结账时间时,我使用的比较允许结果是正确的


最后,我摆脱了限制1。在我看来,您需要知道在特定日期是否有多个房间预订。

我这样解决了这个问题:

  • 我将签入和签出日期的格式从PHP时间戳更改为MYSQL日期
  • 我重新编写了关于您提供给我的信息的查询:

    选择id_prenotazione、id_allogio、数据_checkin、数据_checkout、pagata、esclusiva 来自prenotazioni 其中id_-allogio=$id_-allogio和'$data'>=数据签入和'$data'<数据签出+间隔1天

  • 通过这些更正,查询将在特定日期重新发送特定房间的单个预订。
    谢谢你有用的回答

    很难理解您的语言:)通过从_UNIXTIME()
    提供一个格式参数,您将获得一个字符串结果,比较操作将根据字典顺序执行。什么格式是代码> $DATA/CUT>?考虑提供适当的DDL(和/或SqLoFIDLE)连同想要的结果集,您想要签入日期在$$之前的保留,并且签出日期是在它之后吗?因为你有一个OR子句,而不是AND。我不知道你到底想学什么首先,对不起我的英语$数据来源于:$date=strottime($current\u year.“-”$current\u month.“-”$current\u day)$日期=日期(“d/m/Y”,美元日期);从\u UNIXTIME返回字符串?我不知道。我尝试使用BETWEEN语句,但我没有两个不同的日期(date_1和date_2);我有一个日期($data)应该介于签入和签出之间。谢谢你的全面回复。我需要每次为每个房间显示一个预订,并在入住和退房日期相同时处理案例。data_checkin和data_checkout存储在PHP时间戳中,而$data存储在PHP日期格式中。那么我可以预订3月8日星期六的入住和退房时间?这有意义吗?还是我会在3月8日入住,3月9日退房?如果不了解您的业务规则,很难给出准确的查询代码。例如:一个预订的登记日期为3月8日,结账日期为3月9日。同一房间的另一个预订,登记日期为3月9日,结账日期为3月12日。那么,如果我询问3月9日的情况,我应该看哪一个预订?我猜是第二个。因此,请从我的答案中的查询中删除
    +间隔1天
    。我尝试执行该查询,得到两个预订:第一个预订的退房日期为3月9日,第二个预订的入住日期为3月9日。因此,如果我删除
    code
    +间隔1天,则查询不会选择签出日期。
       parameter-date < data_checkout + INTERVAL 1 DAY