mysql самостоятельное соединение по parent_id, но в алфавитном порядке - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть следующие таблицы. Я упростил код для удобочитаемости

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. Не то чтобы я даже понял, поможет ли это мне.

...