我有这样的表
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
所以,基本上我不想要父母的结果,顺序应该如图所示。
请帮忙。
答案 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开始的行号分配给表中的每个非父项。