Php 我有一个简单的系谱数据库,希望构造一个返回名称而不是id的查询
我有一个系谱数据库,非常简单的列是系谱ID(自动递增主键)、名称(动物名称)、damid、sireid。每种动物都有一个系谱,一旦动物有了后代,这个系谱就被用作雄性或雄性。我想返回最受欢迎的父系——数据库中孩子最多的父系,但我很难做到这一点 我的sql查询很蹩脚,需要处理 此查询用于按id返回50个最受欢迎的父系:Php 我有一个简单的系谱数据库,希望构造一个返回名称而不是id的查询,php,mysql,database,Php,Mysql,Database,我有一个系谱数据库,非常简单的列是系谱ID(自动递增主键)、名称(动物名称)、damid、sireid。每种动物都有一个系谱,一旦动物有了后代,这个系谱就被用作雄性或雄性。我想返回最受欢迎的父系——数据库中孩子最多的父系,但我很难做到这一点 我的sql查询很蹩脚,需要处理 此查询用于按id返回50个最受欢迎的父系: SELECT pedigreeid, name, sireid, count(sireid) AS popular FROM pedigree GROUP BY sireid ORD
SELECT pedigreeid, name, sireid, count(sireid) AS popular
FROM pedigree
GROUP BY sireid
ORDER BY popular
DESC LIMIT 50
但对于名字和系谱,它只是返回第一个拥有最受欢迎的父系的后代作为父系。它不会返回父系的名称(我可以使用“父系ID”列中的数字查找它,但我想编写一个查询来执行此操作。您可以使用一个自子查询来获取此类信息;您当前选择的系谱ID和名称几乎毫无意义(它们是父系ID的一个后代的系谱ID和名称) 此查询将获得最受欢迎的父系的id和后代数量:
SELECT sireid, COUNT(*) AS numOffspring
FROM pedigree
GROUP BY sireid
ORDER BY numOffspring DESC
LIMIT 50
以上需要订购,才能获得50个最受欢迎的产品
现在,您需要获取父系的数据:
SELECT s.pedigreeid, s.name, popular.numOffSpring
FROM (
-- The above query goes here
) AS popular
INNER JOIN pedigree AS s ON popular.sireid = s.pedigreeid
ORDER BY popular.numOffspring DESC
ORDER BY需要在外部查询中重复,因为您不能依赖子查询的顺序通过联接来保留。要提取sireid的名称,您可以将自联接添加到聚合查询中,如:
SELECT
t2.pedigreeid,
t2.name
count(*) popular
FROM
pedigree t1
INNER JOIN pedigree t2 ON t1.sireid = t2.pedigreeid
GROUP BY
t2.pedigreeid,
t2.name
ORDER BY popular DESC
LIMIT 50
PHP代码在哪里?有什么关系吗?这非常有效,谢谢。你说得对,我的查询是胡说八道。@HerronHill如果它被认为是胡说八道的话,我不想“胡说八道”以一种侮辱或贬损的方式,就像描述你最终会收到的数据一样。你真好,但你第一次是对的,这是胡说八道。再次感谢!