PHP如何连接上一行,php – MySQL返回连接表的第一行

我有两个表(country& ducks),其中country table包含世界上的每个国家/地区,ducks表中有一个duckse列表,其中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,sql,mysql,join,greatest-n-per-group

来源: https://codeday.me/bug/20191006/1860955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值