我正在尝试做一个非常复杂的查询(至少对我来说非常复杂,而不是对你:))
我有用户和评论表。
sql小提琴:http://sqlfiddle.com/#!9/b1f845/2号
select user_id, status_id from comments where user_id in (2,3);
+---------+-----------+
| user_id | status_id |
+---------+-----------+
| 2 | 10 |
| 2 | 10 |
| 2 | 10 |
| 2 | 7 |
| 2 | 7 |
| 2 | 10 |
| 3 | 9 |
| 2 | 9 |
| 2 | 6 |
+---------+-----------+
如果我使用
select user_id, status_id from comments where user_id in (2,3)
它返回许多重复的值。
如果可能的话我想得到什么。
如果你看到 status_id = 10
有 user_id= 2,3 and 4 and 2 multiple times.
所以我想从这里得到最新的 user_id
(独特的)例如,
会的 user_id = 4 and 2
现在是主要的复杂部分。我现在想得到用户的信息 user_id= 4 and 2
在一个专栏里,最后我可以得到这样的东西
status_id | userOneUserName | userTwoUserName
10 sadek4 iamsadek2
---------------------------------------------
7 | iamsadek2 | null
---------------------------------------------
9 . | iamsadek2 | sadek2
---------------------------------------------
6 | iamsadek2 | null
我怎么能做到这么复杂的事情。目前,我必须使用应用程序逻辑。
谢谢你抽出时间。
3条答案
按热度按时间2mbi3lxu1#
我想这可能就是你想要的:
演示
(你的小提琴)
我们可以使用相关子查询来查找最大
user_id
仅次于麦克斯user_id
对于每个status_id
,然后将每个列旋转为两个独立的列。使用GROUP_CONCAT
这种方法在这里可能更可取,因为它还允许您轻松地将任意数量的用户作为csv列表来容纳。另外,如果您使用的是mysql 8+或更高版本,那么我们可以利用秩分析函数,这也会更容易。
olmpazwi2#
46scxncf3#
我建议使用
GROUP BY
以及GROUP_CONCAT
,例如: