Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 Mysql获取两个日期之间的表结果_Php_Mysql_Sql_Codeigniter - Fatal编程技术网

Php Mysql获取两个日期之间的表结果

Php Mysql获取两个日期之间的表结果,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我知道我的问题与其他已经回答的问题类似,但我的问题不同,因为我需要一些替代方案或建议,而不是如何走另一条路 我的问题是:我想得到两个日期之间的值,或者根据用户的需要得到一个日期之间的值 当用户请求一天的数据时。。php查询数据成功。。但问题是请求的数据在两个日期之间 $query = $this->db->query("SELECT * FROM `meta_receipt_data` WHERE `meta_transaction_date` >= '$first_da

我知道我的问题与其他已经回答的问题类似,但我的问题不同,因为我需要一些替代方案或建议,而不是如何走另一条路

我的问题是:我想得到两个日期之间的值,或者根据用户的需要得到一个日期之间的值

当用户请求一天的数据时。。php查询数据成功。。但问题是请求的数据在两个日期之间

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE  `meta_transaction_date` >= '$first_date' AND
`meta_transaction_date` <= '$second_date' ");
        return $query->result();
$query=$this->db->query(“从“元收据数据”中选择*”
其中'meta\u transaction\u date`>='$first\u date'和
`元交易日期“=“2014年9月13日”和

`meta_transaction_date`MySQL有一个名为Between的内置函数,您可以这样使用:

SELECT * FROM table_name WHERE date_column BETWEEN 'start_date_parameter' AND 'end_time_parameter'

尝试先转换日期,然后使用
between
语句:

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE `meta_transaction_date` BETWEEN    
date_format(str_to_date('$first_date', '%d/%m/%Y'), '%Y-%m-%d') AND
date_format(str_to_date('$second_date', '%d/%m/%Y'), '%Y-%m-%d')");

meta\u transaction\u date
的类型更改为
date
,因为它就是这样!在传递
日期时也使用标准的
'yyyyy-mm-dd'

您的问题可能源于
'mm/dd/yyyy'
美国日期格式的字符串顺序,这对于编码来说是非常糟糕的。如果您希望以这种格式显示
日期
,请在
选择
并最终输出时将其转换

$query = $this->db->query("SELECT * FROM `meta_receipt_data`
WHERE  `meta_transaction_date` >= '09/13/2014'
AND `meta_transaction_date` <= '09/19/2014' ");
一句忠告,不要使用像
SELECT*
这样的查询,因为它们会降低应用程序的性能。我刚刚在您对自己问题的评论中读到:

我已将类型设置为Varchar

不要这样做。最好使用日期类型存储日期。您可以使用查询:

ALTER TABLE `meta_receipt_data`
MODIFY `meta_transaction_date` DATE NOT NULL;`

好的,这是假设您希望保持列不接受空值。

我发现该值前后都有空格,所以我使用
$first=trim($first\u date)
问题解决了…

关于
$first\u date
$second\u date
和列
meta\u transaction\u date
的数据类型是什么?
$first\u date
$second\u date
是字符串,但它们来自数组
$first\u date=$date['range\u one'];
$second\u date=$date=$date['range\u two']
与to
meta\u transaction\u date相同
我已将类型设置为Varchar…您是否尝试了between函数?这并没有回答问题。在Mysql控制台上,即使我在php代码中使用实际日期,代码也会工作。但是如果我用变量替换值…我会得到空集…您的代码在sql控制台上工作,但在我的php代码中工作没有什么空的setsorry忘记写答案:PI发现值前后都有空格,所以我使用
$first=trim($first_date)
问题解决了..我还将列类型更改为
DATE
谢谢..这是真的..Arth..我知道对日期使用这种格式是不明智的,但这些值来自JavaScript日期选择器,所以我有了摆脱额外拥挤的想法,我想用我自己的方式处理日期..但我知道我会按照你的建议使用
 日期
虽然不起作用..但我发现该值前后都有空格,所以我使用了
$first=trim($first_DATE);
并解决了问题..谢谢BossI使用这个技巧…我想我下一步需要它,但我只是走了很长的路,然后爆炸('/',$first_DATE)
我将每个值分配给关联数组..这是一个很长的booring,但谢谢。。
$query = $this->db->query("SELECT `meta_transaction_date` FROM meta_receipt_data WHERE
                           meta_transaction_date BETWEEN "
                          .date( "Y-M-d", ( strtotime($first_date) ) )." AND "
                          .date( "Y-M-d", ( strtotime($second_date) ) ) );
ALTER TABLE `meta_receipt_data`
MODIFY `meta_transaction_date` DATE NOT NULL;`