我有两个表(国家和鸭子),其中国家表包含世界上的每个国家,鸭子表有一个鸭子列表,其中包含一个 country_id 字段以链接到主要国家/地区。
我正在尝试获取仅包含至少一只鸭子的国家/地区的列表,并从鸭子表中获得该国家内评分最高的鸭子的单个匹配记录。到目前为止,我有:
SELECT *
FROM country c
INNER JOIN ducks d ON c.id = d.country_id
ORDER BY c.country ASC, d.rating DESC
这会返回每只鸭子的列表,而不是每个国家/地区一个。
如果有人能在这里指出正确的方向,我将不胜感激。我宁愿在 SQL 中执行此操作,也不愿为每个国家/地区单独查询以选出评分最高的鸭子。
最佳答案
SELECT c.*, d.*
FROM country c
INNER JOIN ducks d
ON d.id = --- guessing the ducks Primary Key here
( SELECT dd.id --- and here
FROM ducks dd
WHERE c.id = dd.country_id
ORDER BY dd.rating DESC
LIMIT 1
)
MyISAM 表的 (country_id, rating, id)
索引或 InnoDB 表的 (country_id, rating)
索引会有所帮助。
此查询将只显示每个国家/地区的一只鸭子
,即使有多只鸭子具有相同的评级。如果您希望出现评级相同的鸭子,请使用@imm 的GROUP BY
答案。
关于php - MySQL返回连接表的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9559161/