尝试从mysql中选择行,然后在同一个select中查看是否存在值

时间:2013-09-05 16:37:10

标签: php mysql

嘿伙计们,我有一个名为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

2 个答案:

答案 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

在该字段中,您拥有该记录所拥有的子女数量。

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

答案 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