今天遇到这样一个问题,数据初始化时排序字段为0,但是产品需求是排序字段升序排列,但是排序字段为0又想在最后进行展示。那我就只能修改之前sql了。
先展示最初sql写法:
SELECT
pd.id AS "detailId",
pd.title,
IFNUll(pd.brief_cont,'') AS briefCont,
pd.content,
case when (pd.content is not null AND pd.show_type='1') then null else pd.uri end as uri,
pd.create_date AS createDate,
pd.is_top,
pd.sequence
FROM
z_portal p
INNER JOIN z_portal_details pd ON p.id = pd.protal_id
INNER JOIN z_portal_style_details zsd ON p.school_portal_style = zsd.style_id
AND pd.exercise_type = zsd.`code`
WHERE
p.status = 0
AND p.is_delete = 0
AND p.id = 21
AND p.tenant_id = '002'
AND pd.is_delete = 0
AND pd.type = 2
AND pd.exercise_type = 1
AND pd.coordinate=1
AND pd.tenant_id = '002'
AND zsd.is_delete = 0
AND zsd.parent_id = 0
AND zsd.tenant_id = '002'
GROUP BY
pd.id
ORDER BY
pd.is_top desc, pd.sequence = 0,pd.sequence asc , pd.create_date desc
数据返回:
根据需求sql调整后:
SELECT
pd.id AS "detailId",
pd.title,
IFNUll(pd.brief_cont,'') AS briefCont,
pd.content,
case when (pd.content is not null AND pd.show_type='1') then null else pd.uri end as uri,
pd.create_date AS createDate,
pd.is_top,
pd.sequence
FROM
z_portal p
INNER JOIN z_portal_details pd ON p.id = pd.protal_id
INNER JOIN z_portal_style_details zsd ON p.school_portal_style = zsd.style_id
AND pd.exercise_type = zsd.`code`
WHERE
p.status = 0
AND p.is_delete = 0
AND p.id = 21
AND p.tenant_id = '002'
AND pd.is_delete = 0
AND pd.type = 2
AND pd.exercise_type = 1
AND pd.coordinate=1
AND pd.tenant_id = '002'
AND zsd.is_delete = 0
AND zsd.parent_id = 0
AND zsd.tenant_id = '002'
GROUP BY
pd.id
ORDER BY
pd.is_top desc, pd.sequence = 0,pd.sequence asc , pd.istop_time DESC,pd.create_date desc
数据返回就发生变化:
这是因为:pd.sequence=0,表示排除等于0的,对不等于0的先进行排序,等于0放在最后按照正序排;