查询按单列

时间:2016-06-17 18:18:21

标签: php mysql select group-by

我想吐出按父ID分组的数据库结果。

我有下表:

`pages`
    `id` int
    `parent_id` int
    `title` varchar

部分pages的{​​{1}}为0,表示他们没有父母。

假设我在parent_id表中有以下行:

pages

鉴于这些行,我想在我的PHP页面上输出以下内容:

id | parent_id | title
1  | 0         | Colors
2  | 1         | Red
3  | 1         | Green
4  | 1         | Blue
5  | 0         | Devices
6  | 5         | Mobile
7  | 5         | Desktop
8  | 5         | Tablet

我知道我可以使用查询来获取Colors Red Green Blue Devices Mobile Desktop Tablet 为0的行,然后使用另一个查询来获取parent_idparent_id的行。

是否可以将其写为单个查询?

2 个答案:

答案 0 :(得分:1)

是的,但它并不漂亮:你有一个分层数据结构(父/子),并且在一个查询中以这种方式排列事物需要递归查询,mysql不支持。

您需要为每个级别的层次结构进行自我加入:

SELECT parent.*, child.*
FROM yourtable AS parent
LEFT JOIN yourtable AS child ON parent.id = child.parent_id

对于树的每个级别,您都需要上面的其他连接/别名。

答案 1 :(得分:0)

我认为您正在寻找以下解决方案:

SELECT 
  t1.title as parent, t2.title
FROM 
  pages AS t1
LEFT JOIN pages AS t2 
  ON t1.id = t2.parent_id
WHERE
  t2.id IS NOT NULL

您将得到如下结果:

parent  title
Colors  Red
Colors  Green
Colors  Blue
Devices Mobile
Devices Desktop
Devices Tablet

现在你必须在php方面安排它。

这是sqlfiddle链接:http://sqlfiddle.com/#!9/11fa6/3