如何编写mysql查询来获取所需的数据?

时间:2015-02-25 14:17:48

标签: mysql

我有这样的表

id seq is_child type
a   0   0   1
b   1   0   1
c   2   0   1
d   3   0   1
e   4   0   2
f   0   1   1
g   1   1   1
h   2   1   1
i   5   0   1
j   6   0   1

它有四列Id,sequence和is_child列和类型。

父子节点存储在同一个表中,子节点的is_child列值设置为1。

对于父母类型将是2。

序列从0开始并以1递增。对于子序列,从0开始再增加1.

正如你在表中看到的,id是父,它有三个孩子,f,g,h,seq 0,1和2 resp。

我们有另一个表来维护这个父子关系

parent Id   child id
e   f
e   g
e   h

使用此数据,如何触发查询以获得如下所示的结果。

id  seq
a   0
b   1
c   2
d   3
f   4
g   5
h   6
i   7
j   8

所以,基本上我不想要父母的结果,顺序应该如图所示。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您可以使用关系表(http://sqlfiddle.com/#!2/2e767/7)加入节点:

SET @n = -1;
SELECT t.id, @n:=@n+1 seq FROM (
    SELECT DISTINCT IFNULL(c.id, p.id) id
    FROM node p
    LEFT JOIN relation r ON r.parent_id = p.id
    LEFT JOIN node c ON c.id = r.child_id
) t;

答案 1 :(得分:0)

如果不完全了解您的父/子要求,我认为您需要的结果集可以通过这样做来获得。 (http://sqlfiddle.com/#!2/4da58/1/0

select id, @var:=@var+1 seq
  from t1,
  (select @var:=-1) init
 where type <> 2
 order by id

这会将从0开始的行号分配给表中的每个非父项。