嘿伙计们,我有一个名为page_names的数据库表,用于保存导航中的页面。在那个表格中,我有一个parentid,当它是一个主导航时它是0,如果它有一个数字,那么它是那个父亲的孩子。
我需要从表中选择所有行(where ispublished = 1
)但是我需要在数据集中有另一个名为'haschild'的标识符,该标识符将设置为0或数字以表示该导航页面有孩子。我想过用php中的数组做这个,但是意识到拥有那个设置会更好。
我试图加入同一个表来设置值并选择一个select语句,但我似乎无法实现我所需要的。这看起来很容易,但我被卡住了。这就是我,我知道它甚至不是很接近。
SELECT p.* , coalesce( pp.parentid, 0 ) AS haschild
FROM page_names p
LEFT JOIN page_names pp ON p.id = pp.parentid
WHERE p.ispublished =1
AND pp.ispublished =1
ORDER BY p.orderout
答案 0 :(得分:1)
我建议选择。
SELECT p.*,
(SELECT COUNT(id) FROM page_names WHERE parentid=p.id AND ispublished =1) haschild
FROM page_names p
WHERE p.ispublished =1
ORDER BY p.orderout
在该字段中,您拥有该记录所拥有的子女数量。
答案 1 :(得分:0)
你应该能够通过计算它有多少孩子来做到这一点,然后如果这个数字大于0那么它就有了孩子。这样的事情应该有效:
SELECT p.*, count(pp.id) AS children
FROM page_names p
LEFT JOIN page_names pp ON p.id = pp.parentid
WHERE p.ispublished = 1
AND pp.ispublished = 1
GROUP BY p.id
ORDER BY p.orderout