PHP и MySQL
Это существующий проект с некачественным дизайном и разметкой таблиц, который был запрошен для добавления новой функции.
I Мне интересно, может ли такой запрос быть составлен (не самый большой с запросами)
Краткое резюме:
Форма сообщения сделана.
- таблица получает messageid и (пустое) subid
, если сделано НОВОЕ сообщение .. выше повторяется ..
- (messageid и a (пусто) subid)
если сделан комментарий к существующему сообщению ..
- таблица получает идентификатор сообщения и subid, соответствующий сообщению / теме родительского сообщения он комментирует
К сожалению, это все в одной таблице ... и кажется, что его лучше было бы обслуживать в виде нескольких таблиц или что-то в этом роде?
Но:
- Я знаю родительские посты (потому что subid col пуст)
- Я знаю дочерние посты (потому что subid col имеет v alue, соответствующий родительскому сообщению, является комментарием к)
- У всех сообщений есть временная метка.
Как получить запрос и сгруппировать / упорядочить такие вещи, как:
- Выберите -parent posts- без subid
- немедленно иметь все посты -child / comment- под этим
И имейте (изначально?) Порядок по родительской post_date затем дочерний элемент / комментарий (суб-порядок по их post_dates)
Вот пример таблицы настроек:
http://sqlfiddle.com/#! 9 / 19dae / 2/0
Не уверен, нужен ли здесь простой GROUP BY? Или нужно сделать более продвинутый выбор?
Порядок должен быть «первым» выполнен родительским постом «post_date» .. и (каким-то образом) получить следующие дочерние / комментирующие посты, которые будут «введены» после их «родительского» поста в запросе / массиве возвращение ..
Вот мой желаемый порядок результата:
Желаемый результат:
'2020-03-30 09:48:50', 'Poster A', '49203-30032020094850000000', ''
'2020-03-30 09:50:50', 'Poster B', '49204-30032020095050000000', '49203-30032020094850000000'
'2020-04-03 09:55:50', 'Poster C', '49205-03042020095550000000', '49203-30032020094850000000'
'2020-03-31 09:48:50', 'Poster C', '49205-31032020094850000000', ''
'2020-04-03 09:40:50', 'Poster B', '49204-03042020094050000000', '49206-010432020094850000000'
'2020-04-01 09:48:50', 'Poster D', '49206-010432020094850000000', ''
'2020-04-02 09:49:50', 'Poster E', '49207-02042020094950000000', ''
Обновление:
Адресация: @ N go Ван Quan
За его ответ.
Это:
select * from covid19_new
order by
(
CASE covid19_new.subid WHEN 0
THEN covid19_new.id*1000
ELSE covid19_new.subid*1000 + covid19_new.id END
),
covid19_new.id;
(что я думаю, что вы намеревались предоставить вместо того, что вы отправили ??)
** ничего не делает