У меня есть одна таблица, в которой у меня есть id и parent_id. В панели администратора, если пользователь нажимает на кнопку предварительного просмотра, он перенаправляет на сайт с идентификатором предварительного просмотра. когда мы нажимаем на кнопку предварительного просмотра, данные сохраняются в таблице с идентификатором в ключе parent_id.
Я создал запрос и он работает нормально, но он отображает данные по порядку, но я хочу заменить родительскую строку на строку предварительного просмотра.
select * from wp_content
where page='sharepoint_features'
and (status='1' or (status='preview' and parent_id='146'))
and id<>146
здесь 146 — родительский идентификатор, который мы получили для предварительного просмотра формы
по этому запросу мы получили следующие данные
в приведенной выше таблице идентификатор 1303 должен следовать после 145
Вы должны добавить ORDER BY
пункт так,
Попробуй это:
select * from wp_content
where page='sharepoint_features'
and (status='1'
or (status='preview' and parent_id='146'))
and id<>146
order by coalesce(CAST(parent_id as INT), id)
ОБНОВИТЬ
Уважаемый, это SqlFiddle, так что, если я понимаю ваш запрос, результат в порядке.
Мой результат:
144 - a - null
145 - b - null
1303 - c - 146
147 - d - null
ОБНОВЛЕНИЕ 2
Попробуйте выполнить этот запрос и скажите, все ли в порядке:
select * from wp_content
where page='sharepoint_features'
and (status='1'
or (status='preview' and parent_id='146'))
and id<>146
order by
case
when parent_id is null then id
else CONVERT(cast parent_id as INT)
end
Вот возможное решение, основанное на решении @JoeTaras:
select * from wp_content
where page='sharepoint_features'
and (status='1'
or (status='preview' and parent_id='146'))
and id<>146
order by coalesce(NULLIF(parent_id, ''), id)
Вот sqlfiddle с тем, что я предполагаю, это ваша структура данных.