首页 > 解决方案 > mysql self join on parent_id 但按字母顺序排列

问题描述

我有以下表格。我已经简化了代码以提高可读性

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。我什至不明白这是否对我有帮助。

标签: mysqljoinhierarchical-data

解决方案


推荐阅读