LEFT JOIN 顺序和限制
这是我的查询:
SELECT `p`.`name` AS 'postauthor', `a`.`name` AS 'authorname',
`fr`.`pid`, `fp`.`post_topic` AS 'threadname', `fr`.`reason`
FROM `z_forum_reports` `fr`
LEFT JOIN `forums` `f` ON (`f`.`id` = `fr`.`pid`)
LEFT JOIN `forums` `fp` ON (`f`.`first_post` = `fp`.`id`)
LEFT JOIN `ps` `p` ON (`p`.`id` = `f`.`author_guid`)
LEFT JOIN `ps` `a` ON (`a`.`account_id` = `fr`.`author`)
我的问题是这个左连接:
SELECT `a`.`name`, `a`.`level`
[..]
LEFT JOIN `ps` `a` ON (`a`.`account_id` = `fr`.`author`)
因为,如果 a
有很多行,它会像我的情况一样返回:
NAME | LEVEL
Test1 | 1
Test2 | 120
Test3 | 2
Test4 | 1
我希望它选择 a.name 的
order
级别为 desc
且限制为 1,因此它将返回更高 level
的名称,其中 (a.account_id = fr.author)
。
希望你能抓住我。如果没有,请随时发表评论。
This is my query:
SELECT `p`.`name` AS 'postauthor', `a`.`name` AS 'authorname',
`fr`.`pid`, `fp`.`post_topic` AS 'threadname', `fr`.`reason`
FROM `z_forum_reports` `fr`
LEFT JOIN `forums` `f` ON (`f`.`id` = `fr`.`pid`)
LEFT JOIN `forums` `fp` ON (`f`.`first_post` = `fp`.`id`)
LEFT JOIN `ps` `p` ON (`p`.`id` = `f`.`author_guid`)
LEFT JOIN `ps` `a` ON (`a`.`account_id` = `fr`.`author`)
My problem is this left join:
SELECT `a`.`name`, `a`.`level`
[..]
LEFT JOIN `ps` `a` ON (`a`.`account_id` = `fr`.`author`)
Since, in case a
has MANY rows and it'll return like in my case:
NAME | LEVEL
Test1 | 1
Test2 | 120
Test3 | 2
Test4 | 1
I want it to select a.name
with order
of level desc
and limit 1, so it'll return the name of higher level
where (a.account_id = fr.author)
.
Hope you got me. If not, feel free to post a comment.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试将: 替换
为:
Try replacing:
with:
将 LEFT JOIN 子句替换为以下内容:
如果
ps
中有多个行具有相同的帐户 ID 和相同的级别,并且该级别是最大级别,则仍会返回多行:如果这种情况可以出现,那么您必须决定要做什么 - 并适当地调整查询。例如,您可能决定将 MAX(b.name) 与 GROUP BY 子句一起使用,以任意选择两个名称中按字母顺序排列靠后的名称。
Replace the LEFT JOIN clause with something like:
This will still return multiple rows if there were several rows in
ps
with the same account ID and the same level and that level was the maximum level:If this situation can arise, then you have to decide what you want to do - and tune the query appropriately. For example, you might decide to use
MAX(b.name)
with a GROUP BY clause to arbitrarily select the alphabetically later of the two names.