【问题标题】:How to fetch value from database in beetween the date range using PHP and Mysql如何使用 PHP 和 Mysql 从日期范围内的数据库中获取值
【发布时间】:2016-10-21 12:08:50
【问题描述】:

我需要提取日期范围内的值并按其他值分组。

我有输入 date=2016-10-21。我需要获取日期范围(date_from 和 date_to)之间的所有数据。这些值应按subcat_id 分组,并且应忽略具有空白 date_from 或 date_to 字段的行。

$date='2016-10-21';
$sql="select * from db_details where date_from>='".$date."' and date_to <= '".$date."' group by subcat_id ";

id    subcat_id   subcat_name     date_from          date_to    
1         62         ddd          2016-10-22         2016-10-26    
2         62         ddd          2016-10-22         2016-10-26    
3         62         ddd                                            
4         63         sss          2016-10-18         2016-10-21    
5         63         sss          2016-10-18         2016-10-21    
6         64         fff          2016-10-20         2016-10-25

【问题讨论】:

  • 那你有什么尝试?
  • select * from table where date_from>= 'date' and date_to
  • select * from table where date_from 在 $date1 和 $date2 之间
  • '我正在尝试这样 "select * from db_details where date_from>='".$date."' and date_to
  • 我看到您现在编辑了您的评论以包含 $ 标志。您为什么不在问题中发布完整的代码,而不是发表评论?和其他人猜测。

标签: php mysql date


【解决方案1】:

从 cmets 来看,您的问题是您的查询:

select * from db_details where date_from>='".date."' and date_to <= '".date."' group by subcat_id 

首先,您不需要在查询中加上cancat (.date.),只需插入$variable 即可。

其次,您实际上并没有在查询中插入任何内容。从字面上看,您正在搜索单词 .date. 和单词 .date. 之间的所有内容

您的查询应如下所示:

select * from db_details where date_from>=$date_from and date_to <= $date_to group by subcat_id 

作为一个建议,你应该升级到 mysqli,或者如果你有,你应该使用named placeholders

【讨论】:

  • 请检查我更新的帖子。这里我需要使用给定的输入日期获取所有值。该日期应介于日期范围之间。
【解决方案2】:

你的逻辑错了:

SELECT * FROM db_details WHERE date_from >= :date AND date_to <= :date GROUP BY subcat_id

这读作:指定的日期是之前开始日期和之后到日期。如果起始日期总是在截止日期之前,这是一个不可能的条件:它永远不会匹配任何行。

你想要这样的东西:

SELECT * FROM db_details WHERE date_from <= :date AND date_to >= :date GROUP BY subcat_id

或:

SELECT * FROM db_details WHERE :date BETWEEN date_from AND date_to GROUP BY subcat_id

【讨论】:

  • 如果 date_from 和 date_to 值为空,则应忽略它们。
  • @subhra 所以添加条件。
  • 我有这样的价值 $date='2016-10-21' 。虽然我像这样date_from &lt;= :date AND date_to &gt;= :date .它不会来。
  • @subhra 这是 PDO 中准备好的语句的语法。如果您使用的是 mysqli,则可以使用问号代替我正在使用的 :date 占位符。无论哪种方式,我总是建议使用准备好的语句来避免导致 sql 注入的错误。
  • 我做到了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2015-07-24
  • 2020-04-29
  • 2021-08-27
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多