select a.* ,b.flow_id from daiban_order_serve as a left join daiban_order_serve_flow as b on b.daiban_serve_id = a.id where 1 and supplier_id = 23 and b.uid = 100031 and b.is_kais = 2 and b.is_accept = 1 order by create_time desc limit 0,20 帮我优化一下这个mysql语句去除重复daiban_serve_id值的,但是要优先显示is_kais不等于2的
时间: 2023-05-21 21:04:29 浏览: 66
好的,让我看看这个 MySQL 语句。基本上,您需要做的就是在查询中添加 DISTINCT 关键字来去除重复的 daiban_serve_id。此外,您需要将 is_kais 不等于 2 的结果排在前面。为了实现这一点,您可以添加一个条件或者重新排列 ORDER BY 子句。优化后的 SQL 查询语句如下:
SELECT DISTINCT a.*, b.flow_id
FROM daiban_order_serve AS a
LEFT JOIN daiban_order_serve_flow AS b
ON b.daiban_serve_id = a.id
WHERE supplier_id = 23 AND b.uid = 100031 AND b.is_accept = 1
AND (b.is_kais != 2 OR b.is_kais IS NULL)
ORDER BY b.is_kais DESC, create_time DESC
LIMIT 0,20
这个查询将首先按照 is_kais 的值进行排序,将为 2 的结果放在后面,并保留 NULL 值。然后,它将按照 create_time 的值进行逆序排序,最后限制结果集的大小为 20 条记录。
相关问题
DaibanOrderServeFlow::model()->findByAttributes(array('daiban_serve_id'=>$id,'is_kais'=>[1,2]))改一下,添加查询flow_id最大的一条
记录的代码应该是这样的:
DaibanOrderServeFlow::model()->findByAttributes(array(
'daiban_serve_id' => $id,
'is_kais' => array(1, 2),
), array(
'order' => 'flow_id DESC',
'limit' => 1,
));
这个代码会查询指定的 $id 和 $is_kais 值下所有记录中,根据 flow_id 从大到小排序,返回最大的一条记录。