同一个表中的父/子

时间:2013-04-06 17:45:20

标签: php mysql sql join

我有如下表结构:

id |parent|name |value
1  | 0    | aaa |
2  | 0    | bbb |
3  | 0    | ccc |
4  | 1    |     | 111
5  | 1    |     | 222
6  | 3    |     | 333

我想显示父项是否有子记录。

像:

(父ID +姓名+价值第一个孩子)

1 - aaa - 111
3 - ccc - 333

1 个答案:

答案 0 :(得分:1)

数据库中没有第一个孩子的意思,你可以通过id的最小值或值的最小值得到第一个孩子,但这些值不会以特定顺序存储在表,所以你不知道哪个值是第一个。

但是,假设id是自动增量列,那么第一个孩子的值是最小值id的值,那么你可以这样做:

SELECT
  t1.parent,
  t2.name,
  t1.value
FROM tablename AS t1
INNER JOIN
(
  SELECT MIN(id) AS id, parent
  FROM tablename
  GROUP BY parent
) AS t22 ON t22.id = t1.id AND t1.parent = t22.parent
INNER JOIN tablename AS t2 ON t1.parent = t2.id;

请在此处查看:

这会给你:

| PARENT | NAME | VALUE |
-------------------------
|      1 |  aaa |   111 |
|      3 |  ccc |   333 |

或:您可以按最小值获取:

SELECT
  t1.parent,
  t2.name,
  MIN(t1.value) AS value
FROM tablename AS t1
INNER JOIN tablename AS t2 ON t1.parent = t2.id
GROUP BY t1.parent, t2.name;

看到它的实际效果:

这会给你:

| PARENT | NAME | VALUE |
-------------------------
|      1 |  aaa |   111 |
|      3 |  ccc |   333 |