PHP SQL LEFT JOIN语句丢失了一列

时间:2018-08-13 07:55:42

标签: php mysql sql left-join

我正在使用本文https://stackoverflow.com/a/51816820/6822845中建议的查询来列出我的表内容。这真的很好,我得到了每个节的列表,其子节用逗号分隔在另一列中,因此我可以将其分解并将其转换为数组。我的问题是,我的sections表(在上面链接的我的其他文章下提到)有另一个名为“ sorder”的列,用于保存显示顺序。我不知道为什么,但是我无法将列选择每次输出0时都将其输出。

SELECT sections.sorder as sorder ,section_titel as t1,
       GROUP_CONCAT(sub_section_titel) as t2 
FROM sections
    LEFT JOIN sub_sections ON section_id = sId
GROUP BY t1
ORDER by sorder

每次运行它时,顺序显示为“ 0”。但这不是0。奇怪的是,我可以读取sub_section表中的“ iorder”列。但是主表“ sections”中的“ sorder”列无法访问/每次为0。我正在使用Mysql:

1 个答案:

答案 0 :(得分:0)

我创建了一个SQLFiddle,希望它代表您的数据。在该示例中,ORDER BY sorder工作正常。我还在ORDER BY中加入了GROUP_CONCAT,以便可以对小节标题进行排序。因此,使用原始查询:

SELECT section_titel as t1, GROUP_CONCAT(sub_section_titel) as t2 
FROM sections LEFT JOIN sub_sections ON section_id = sId
GROUP BY t1

输出为

t1              t2
Section One     SubOne,SubTwo
Section Three   SubThree
Section Two     (null)

但是使用新查询:

SELECT sorder, section_titel as t1, GROUP_CONCAT(sub_section_titel ORDER BY iorder) as t2 
FROM sections LEFT JOIN sub_sections ON section_id = sId
GROUP BY t1
ORDER BY sorder

输出为:

sorder  t1              t2
1       Section Three   SubThree
2       Section One     SubTwo,SubOne
3       Section Two     (null)

根据Section ThreeSection One的值,注意SubTwoSubOne以及sorderiorder的重新排序。