使用php对mysql记录进行高级/技术排序

I am having an issue trying to determine how to sort some data from a mysql database. I have a content items table, and the records contain an id (auto increment), a parent_id (so one page can be a child of another), url, and title.

I want to sort the data in sort of a nested list style, where the main non-child page is first level, and those with that pages id as a parent id are listed below it. Is there a special order to use here, or would this need to be sorted by php?

So, as an example:

id   |  parent_id  | title
---------------------------
1       0            Page 1
3       0            Page 3
6       1            Page 6
7       3            Page 7

The list should look as such:

Page 1
    Page 6
    Any others with parent id of 1
Page 3
    Page 7
    Any others with parent id of 3

展开翻译

译文

我在尝试确定如何从mysql数据库中对某些数据进行排序时遇到问题。 我有一个内容项表,记录包含一个id(自动增量),一个parent_id(所以一个页面可以是另一个页面的子项),url和title。</ p>

我想要 以嵌套列表样式排序数据,其中主非子页面是第一级,而那些页面id作为父ID的那些列在它下面。 这里是否有特殊的顺序,或者需要通过php进行排序?</ p>

因此,作为示例:</ p>

   id |  parent_id |  title 


1 0 Page 1
3 0 Page 3
6 1 Page 6
7 3 Page 7

</ code> </ pre>

列表应该如下:</ p>

  Page 1 
Page 6
任何其他父母 id为1
Page 3
Page 7
任何其他父ID为3
</ code> </ pre>
</ div>的人

dpf71390
dpf71390 当我必须为任意数量的级别执行此操作时,我在PHP中进行了排序。您可以编写递归过程来执行此操作。
4 个月之前 回复
dpp80346
dpp80346 关系数据库中的分层数据并不简单。最好的方法是使用闭包表:coderwall.com/p/lixing/closure-tables-for-browsing-trees-in-sql
4 个月之前 回复
dqce48404
dqce48404 第三级,我试图理解如何对这种数据进行排序,如果它可以通过mysql完成,或者我必须循环结果并手动排序。
4 个月之前 回复
dongxiezhi9564
dongxiezhi9564 在parent.id=child.parent_id上使用自联接来执行此操作。
4 个月之前 回复
douni1396
douni1396 你只需要2个级别,或者下面的额外嵌套?
4 个月之前 回复

2个回答

For a table with 2 nested levels without any JOIN:

SELECT * FROM table ORDER BY IF(parent_id = 0, id, parent_id), id

展开翻译

译文



对于具有2个嵌套级别而没有任何JOIN的表:</ p>

  SELECT * FROM 表ORDER BY IF(parent_id = 0,id,parent_id),id 
</ code> </ pre>
</ div>

doumi5223
doumi5223 确实。
4 个月之前 回复
duanqun9618
duanqun9618 聪明。 你应该提一下,当$ row ['parent_id']!= 0时,该行应该缩进
4 个月之前 回复

Join the table with itself, joining the parent ID with the ID.

SELECT parent.title AS parent_page, child.title AS child_page
FROM yourTable AS parent
JOIN yourTable AS child ON child.parent_id = parent.id
ORDER BY parent.id

In your PHP loop, print the parent page heading whenever it changes. See How can i list has same id data with while loop in PHP? for the structure of that loop.

展开翻译

译文



自己加入表格,将父ID加入ID。</ p>

   SELECT parent.title AS parent_page,child.title AS child_page 
FROM yourTable AS parent
JOIN yourTable AS child ON child.parent_id = parent.id
ORDER BY parent.id
</ code> </ pre>

在PHP循环中,每当更改时打印父页面标题。 请参阅如何 我可以列出与PHP中的while循环相同的id数据吗?对于该循环的结构。</ p>
</ div>

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!