首页 > 解决方案 > 前一行 id 在 MySQL 中连续显示在父列的下两行中

问题描述

我的桌子是:

SELECT id, name FROM category

表数据显示

id | name
---| ----
1  | John
2  | Jimy
3  | James
4  | Phil
5  | Sayed
6  | Doe
7  | Warkes
8  | Ryan
9  | Tim
10 | Joe

我想要这样

id | name   | parent_id
---| ------ | ------
1  | John   |     0
2  | Jimy   |     1
3  | James  |     1
4  | Phil   |     2
5  | Sayed  |     2
6  | Doe    |     3
7  | Warkes |     3
8  | Ryan   |     4
9  | Tim    |     4
10 | Joe    |     5

我想首先parent_id总是0在第一行并first row id显示在2nd3rd行列中parent_id

Second row id在列中显示4th5thparent_id。它将连续进行。

如果类别表 id 从 4 开始,那么它将显示如下

id   | name    | parent_id
---- | ------- | --------
4    | Phil    |     0
5    | Sayed   |     4
6    | Doe     |     4
7    | Warkes  |     5
8    | Ryan    |     5
9    | Tim     |     6

我只有category table没有其他parent table的。

标签: mysql

解决方案


如果您的 ID 始终以 1 递增且没有间隙,您可以parent_id使用 FLOOR 函数模拟该值:

SELECT id, name, FLOOR(id / 2) as parent_id FROM category;

但是一个更简洁和更强大的选项是parent_id与条目一起保存(或在单独的相关表中),以便您的查询将选择附加列,例如:

SELECT id, name, parent_id FROM category2;

或者

SELECT c.id, c.name, p.parent_id FROM category c JOIN parents p ON p.id = c.id;

有关工作示例,请参阅http://sqlfiddle.com/#!9/c74821/1 。


推荐阅读