2

嘿伙计们,我有一个名为 page_names 的数据库表,它将页面保存在导航中。在该表中,当它是主导航时,我的 parentid 为 0,如果它有一个数字,则它是该父项的子项。

我需要从表中选择所有行where ispublished = 1(我想过用 php 中的数组来做这件事,但意识到最好有那个集合。

我试图加入同一个表来设置值并选择一个选择语句,但我似乎无法实现我所需要的。这似乎是一件很容易的事情,但我被困住了。这就是我所在的地方,我知道它甚至不接近。

    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
4

2 回答 2

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

在 haschild 字段中,您有该记录的子项数。

http://sqlfiddle.com/#!2/326ab/10

于 2013-09-05T16:59:46.547 回答
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
于 2013-09-05T16:41:58.203 回答