使用一对多表呕吐在JOIN上匹配的所有层次结构数据

时间:2014-04-21 20:14:50

标签: mysql sql cakephp activerecord

基本上,我有一个Heirarchal Tree Table

(按钮)

id INT(11),
name VARCHAR(80),
parent_id INT(11),
lft INT(11),
rght INT(11)

和另一个表的一对多关系

(kiosk_buttons)

id INT(11),
kiosk_id INT(11) "foreign key to kiosk table",
button_id INT(11) "foreign key to buttons table"

我一直在尝试省略具有匹配buttons.id和kiosk_buttons.button_id的行,同时省略匹配行的子项。

以下是我目前的查询,它可以省略行,但不能省略它们。

SELECT * 
FROM buttons as b
LEFT JOIN kiosk_buttons as kb
ON b.id = kb.button_id
WHERE kb.button_id is NULL

1 个答案:

答案 0 :(得分:0)

SQL只是遍历和循环的错误概念,它是针对集合的。因此,如果您使用编程语言来处理数据,则必须以查询的形式将遍历放在那里,然后是

SELECT * 
FROM buttons as b
WHERE b.parent_id in (<last_button_list>)

虽然有任何结果显示。处理该数据并将新的button_id列表设置为。

但如果它让你感到安慰:这样就可以更容易地处理数据了,因为整个树的线性列表是没用的。