我有一个MySQL查询,我想从我的数据库中提取数据,但它是基于当前月份的信息
FROM lbs_trace_etrack WHERE (lbs_agent = '$slfirstname' AND DATE (lbs_date) = CURDATE()) ORDER BY lbs_date DESC LIMIT 0,50");此字符串提取当天的信息。
我也尝试了下面的字符串,但没有得到任何结果:
FROM lbs_trace_etrack WHERE (lbs_agent = '$slfirstname' AND MONTH(lbs_date) = (MONTH(NOW()) AND YEAR(lbs_date) = YEAR(NOW())我的表格日期格式如下2016-08-02
发布于 2016-08-04 01:21:32
假设lbs_agent是注释中提到的日期字段类型,您可以这样做(请注意,我只是显示WHERE子句中相关的日期部分):
WHERE lbs_agent >= DATE_FORMAT(NOW() ,'%Y-%m-01')重要的是,不要在WHERE比较的左侧(字段定义)使用函数调用,因为这样将无法利用该字段上的任何索引。这样做需要使用MySQL对表中的每一行执行此字段上的函数进行全表扫描,以便进行比较。
您可以随意使用MySQL函数作为比较值,因为在计划查询时,这些值只会计算一次。然后,您可以在字段上使用索引来快速过滤表中符合条件的行。从查询执行角度来看,这基本上等同于您的查询包含以下WHERE子句:
WHERE lbs_agent >= '2016-08-01'这与您问题中的示例相比,这些示例将被执行为:
WHERE DATE(lbs_date) = '2016-08-03'和
WHERE MONTH(lbs_date) = 8 AND YEAR(lbs_date) = 2016这两种方法都需要全表扫描,因为在扫描该行之前,无法确定从该字段派生的值。
发布于 2016-08-04 01:32:56
或者像这样使用PHP变量:
<?php
$start = date('Y-m-01'); // FIRST DAY OF CURRENT MONTH
$end = date("Y-m-t", strtotime(date("Y-m-d"))); // LAST DAY OF CURRENT MONTH
$sql = "SELECT * FROM lbs_trace_etrack WHERE lbs_agent = '".$slfirstname."' AND (lbs_date BETWEEN '".$start."' AND '".$end."')";
?>发布于 2016-08-04 01:34:09
我已经做了以下工作,并且它是有效的
FROM lbs_trace_etrack WHERE lbs_agent = '$slfirstname' AND MONTH(lbs_date) = MONTH(CURDATE()) AND YEAR(lbs_date) = YEAR(CURDATE()) ORDER BY lbs_date ASC, lbs_time ASC 感谢所有人和Tijo的指导
https://stackoverflow.com/questions/38749794
复制相似问题