У меня есть следующие таблицы. Я упростил код для удобочитаемости
CREATE TABLE entries (
ID int(),
entry varchar(),
parent_id int()
);
CREATE TABLE nouns (
entry_id int(),
plural varchar(),
[...]
);
CREATE TABLE verbs (
entry_id int(),
pres_part varchar(),
past_part varchar(),
[...]
);
CREATE TABLE definitions (
ID int(),
definition varchar(),
[...]
);
CREATE TABLE definitions_entries (
definition_id int(),
entry_id int()
);
и отображаю все записи на странице глоссария следующим образом:
SELECT *
FROM entries
LEFT JOIN nouns ON nouns.entry_id = entries.ID
LEFT JOIN verbs ON verbs.entry_id = entries.ID
LEFT JOIN definitions_entries ON entries.ID = definitions_entries.entry_id
LEFT JOIN definitions ON definitions_entries.definition_id = definitions.ID
ORDER BY entries.entry
Но я хочу изменить список так, чтобы потомки записи появляются под их родителями, но родительские записи по-прежнему сортируются в алфавитном порядке. Я представляю, что результат будет выглядеть примерно так ...
1 entry a null definition 1
4 entry a entry x definition 2
5 entry a entry y definition 3
2 entry b null definition 4
5 entry b entry z definition 5
3 entry c null definition 6
Я пытался следовать это и это и это но я никуда не доберусь.
У меня не осталось SQL примеров, чтобы показать, потому что они все просто пошли в дерьмо, а я потерян и растерян. Хотя лучший результат, который я получил, выглядел примерно так ...
4 entry a entry x definition 2
5 entry a entry y definition 3
5 entry b entry z definition 5
1 entry a null definition 1 missing
2 entry b null definition 4 missing
3 entry c null definition 6 missing
Я бегу MySQL 5.6, поэтому я не могу использовать RECURSIVE WITH. Не то чтобы я даже понял, поможет ли это мне.