YII2中3个不同表的3个不同列中的三个日期中最大的MySql顺序

YII2中3个不同表的3个不同列中的三个日期中最大的MySql顺序,mysql,sql,yii2,sql-order-by,Mysql,Sql,Yii2,Sql Order By,我正在寻找一种解决方案,根据下一次电话、会议或与联系人相关的任务的时间来订购联系人 $query->andWhere('ORDER By GREATEST( MAX( UNIX_TIMESTAMP( DATE_FORMAT( CONCAT(meeting.from_date, " ",meeting.from_hour), "%Y-%m-%d %H:%i"))), MAX( UNIX_TIMESTAMP( DATE_FORMAT( CONCAT(call.call_date, " ",

我正在寻找一种解决方案,根据下一次电话、会议或与联系人相关的任务的时间来订购联系人

 $query->andWhere('ORDER By  GREATEST( MAX( UNIX_TIMESTAMP( DATE_FORMAT( CONCAT(meeting.from_date, " ",meeting.from_hour), "%Y-%m-%d %H:%i"))), MAX( UNIX_TIMESTAMP( DATE_FORMAT( CONCAT(call.call_date, " ",call.call_hour), "%Y-%m-%d %H:%i"))) , MAX(UNIX_TIMESTAMP(DATE_FORMAT(task.due_date, "%Y-%m-%d %H:%i")))) DESC ');
但是我得到了以下数据库异常

          Syntax error 
    OR 
    accessVIOLATION: 1064 you have an error IN your sql syntax;CHECK the manual that corresponds TO your mysql server version FOR the RIGHT syntax TOUSE near 'ORDER By  GREATEST( MAX( UNIX_TIMESTAMP( DATE_FORMAT( CONCAT(meeting.from_date, ' at line 1\nthe sql being executedWAS:

SELECT Count(*) FROM (SELECT DISTINCT `contact`.* 
                           FROM            `contact` 
                           LEFT JOIN       `contact_tag` 
                           ON              `contact`.`id` = `contact_tag`.`contact_id` 
                           LEFT JOIN       `favorite` 
                           ON              `contact`.`id` = `favorite`.`contact_id` 
                           LEFT JOIN       `contact_reach` 
                           ON              `contact`.`id` = `contact_reach`.`contact_id` 
                           LEFT JOIN       `meeting` 
                           ON              `contact`.`id` = `meeting`.`contact_id` 
                           LEFT JOIN       `call` 
                           ON              `contact`.`id` = `call`.`contact_id` 
                           LEFT JOIN       `task` 
                           ON              `contact`.`id` = `task`.`contact_id` 
                           WHERE           ((`is_deleted`=0)) 
                           AND  ( ORDER BY greatest( max( unix_timestamp( date_format( concat(meeting.from_date, " ",meeting.from_hour), "%Y-%m-%d %H:%i"))), max( unix_timestamp( date_format( concat(call.call_date, " ",call.call_hour), "%Y-%m-%d %H:%i"))) , max(unix_timestamp(date_format(task.due_date, "%Y-%m-%d %H:%i")))) DESC )) `c`

如何解决这个问题?

您正在使用$query->andWhere来管理订单。这是错误的(这会产生一个混合的where/and子句,其中order by子句会产生sintax错误)

您应该使用$query->orderBy

$query->orderBy( 'ORDER BY greatest(  
                    max( unix_timestamp( date_format( concat(meeting.from_date, " ",meeting.from_hour), "%Y-%m-%d %H:%i"))), 
                    max( unix_timestamp( date_format( concat(call.call_date, " ",call.call_hour), "%Y-%m-%d %H:%i"))) , 
                    max(unix_timestamp(date_format(task.due_date, "%Y-%m-%d %H:%i")))) DESC' ) ;

请参阅@草莓,这不是我问题的答案我想要的是解决以下区域中的错误和(按最大顺序(max(unix_时间戳)(日期格式(concat(meeting.from_date,”,meeting.from_hour),%Y-%m-%d%H:%i))、max(unix_时间戳(日期格式)(concat(call.call_date,”,call.call_hour),%Y-%m-%d%H:%i))、max(unix_时间戳)(日期格式(concat(call.call.call.call.call时间戳),%m-%d%H:%i))(unix_时间戳(日期格式(task.due_date,“%Y-%m-%d%H:%i”))DESC)一旦消除此查询中的所有语法错误,它仍然无法工作。因此,我建议您花一些时间遵循上面提供的步骤。