Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
Mysql 如何按日期顺序解决问题_Mysql_Sql - Fatal编程技术网

Mysql 如何按日期顺序解决问题

Mysql 如何按日期顺序解决问题,mysql,sql,Mysql,Sql,事实上,我在db中保存了dd/mm/yyyy格式的日期。“订购方式”不起作用。没有SQL错误,但日期不符合顺序。以下是您的查询: SELECT COUNT(patient_id) AS idpateint, patient_id FROM patient WHERE STR_TO_DATE(date_enter,'%d/%m/%Y' ) BETWEEN STR_TO_DATE( '$repeat','%d/%m/%Y' ) AND STR_TO_DATE('$to

事实上,我在db中保存了dd/mm/yyyy格式的日期。“订购方式”不起作用。没有SQL错误,但日期不符合顺序。

以下是您的查询:

  SELECT COUNT(patient_id) AS idpateint,
    patient_id
  FROM patient
  WHERE STR_TO_DATE(date_enter,'%d/%m/%Y' )
      BETWEEN STR_TO_DATE( '$repeat','%d/%m/%Y' ) AND STR_TO_DATE('$to','%d/%m/%Y')
  AND patient_type='opd'
  AND patient_id  ='$idpatient1'
  ORDER BY STR_TO_DATE(date_enter,'%d/%m/%Y' )
选择中有一个
count()
。这会将查询转换为聚合查询,因此它只返回一行。此外,您只选择了一个患者id。我可以想象,您希望按日期进行计数,因为您非常关注
日期

以下将按日期给出计数,无论患者是谁:

select count(patient_id) as numpatients, patient_id
from patient
where STR_TO_DATE(date_enter, '%d/%m/%Y' ) between STR_TO_DATE('$repeat', '%d/%m/%Y' ) and 
                                                  STR_TO_DATE('$to', '%d/%m/%Y') and
       patient_type = 'opd' and
       patient_id = '$idpatient1'
order by STR_TO_DATE(date_enter, '%d/%m/%Y' )
顺便说一下。你不认为所有这些调用
STR\u to\u DATE()
的查询看起来很糟糕吗。除了使查询效率降低之外,它们还很难看。使用数据库数据类型在数据库中存储日期。这就是他们的目的。

您是否将日期(值)存储为
日期(数据类型)?
select STR_TO_DATE(date_enter, '%d/%m/%Y' ), count(patient_id) as numpatients
from patient
where STR_TO_DATE(date_enter, '%d/%m/%Y' ) between STR_TO_DATE('$repeat', '%d/%m/%Y' ) and 
                                                   STR_TO_DATE('$to', '%d/%m/%Y') and
       patient_type = 'opd' and
group by STR_TO_DATE(date_enter, '%d/%m/%Y' )
order by STR_TO_DATE(date_enter, '%d/%m/%Y' );