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)一旦消除此查询中的所有语法错误,它仍然无法工作。因此,我建议您花一些时间遵循上面提供的步骤。