使用等级列显示大童的数量

时间:2015-10-20 00:48:34

标签: php mysql

我正在开发一个专注于动物的网站,并且一直在努力弄清楚如何显示一个分类的孙子,曾孙子等的数量。

这个脚本似乎可以很好地显示孩子的数量,除了它显示无意义的数字,如物种13,应该有0个孩子。

$stm = $pdo->prepare("SELECT Ch2.Taxon, COUNT(*) - 0 Children
 FROM gz_life_mammals Ch
 LEFT OUTER JOIN gz_life_mammals Ch2 on Ch.Taxon = Ch2.Taxon
 WHERE Ch2.Parent = :MyURL
 GROUP BY Ch.Parent");
 $stm->execute(array(
 'MyURL'=>$MyURL,
));

while ($row = $stm->fetch())
{
 $ChildrenCount = $row['Children'];
}

echo $ChildrenCount;

我还没有能够显示正确数量的大孩子;结果非常不规律。

所以我想出了另一个方案。以下是我的数据库表中的一些数据,以父子关系排列。

**Taxon | Parent | Rank**

Mammalia | Chordata | 25

Carnivora | Mammalia | 35

Canidae | Carnivora | 45

Canis | Canidae | 55

Canis-lupus | canis | 65

假设我导航到MySite / life / carnivora页面,我想知道该顺序中有多少种。这意味着我必须确定有多少伟大的盛大嘉年华。

如果我不能用传统的方式做,那么也许我可以让它倒退。我只是编写一个查询,计算字段Rank的值为' 65'其伟大的祖父母是食肉目。'

现在有人怎么写这样的查询?

1 个答案:

答案 0 :(得分:1)

我认为您的问题可能会受益于递归查询。在MySql中显然不可能,所以我找了一个解决方法。所以:基本上从this Q/A获取角色的角色。链接到那里from this。通过大型搜索引擎发现。

我对发布这个答案犹豫不决,因为我不完全确定这里发生了什么。 (例如,我不知道第一个链接帖子中提到的"危险"在你的情况下是否重要。你绝对希望成为在现场系统上使用它之前要小心< / CMA>

此查询返回后代数:MyUrl具有。

SELECT  COUNT(@id := (
        SELECT  `taxon`
        FROM    gz_life_mammals
        WHERE   `parent` = @id
    )) AS numDescendants
FROM (
    SELECT  @id := :MyUrl
) vars
STRAIGHT_JOIN gz_life_mammals
WHERE @id IS NOT NULL;

有趣的是,如果您从COUNT()周围移除@id := (SELECT ...,则会获得所有后代加上一个NULL的列表。