今天遇到這樣一個問題,數據初始化時排序字段爲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放在最後按照正序排;