作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个专注于动物的网站,并且一直在努力弄清楚如何显示分类单元的孙辈、曾孙辈等的数量。
这个脚本似乎可以很好地显示 child 的数量,除了它显示无意义的数字,例如物种 13,它应该有 0 个 child 。
$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,我想知道有多少物种按此顺序排列。这意味着我必须确定 Carnivora 有多少曾孙。
如果我不能以传统方式做到这一点,那么也许我可以让它向后工作。我只是编写了一个查询,计算字段 Rank 的值为“65”且其曾祖 parent 为“Carnivora”的每一行。
现在有人知道如何编写这样的查询吗?
最佳答案
我认为您的问题可以从递归查询中获益。显然在 MySql 中不可能,所以我寻找解决方法。所以:基本上是从this Q/A中一个字符一个字符地提取字符.链接到那里from this .通过大型 oogling 搜索引擎发现。
我对发布这个答案犹豫不决,因为我不完全确定这里发生了什么。 (例如,我不知道第一个链接帖子中提到的“危险”是否对您的情况有影响。在实时系统上使用它之前,您肯定要小心
此查询返回 :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;
有趣的是,如果您从 @id := (SELECT ...
周围删除 COUNT()
,您将获得所有后代 的列表加上一个 NULL
行。
关于php - 使用排名列显示孙子数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226269/
我是一名优秀的程序员,十分优秀!