我想加入三张 table 。
第一个是“用户”表。
+---------+--------------+---------+
|Id |UserName |blah |
+---------+--------------+---------+
|1 |Amila |blah |
+---------+--------------+---------+
|2 |Kamal |blah |
+---------+--------------+---------+
|3 |Nuwan |blah |
+---------+--------------+---------+
第二个是“图像”表。它包含用户上传的所有图像。此外,如果 Type==PI 且最大 id 将是用户当前的个人资料图像。
+---------+--------------+---------+---------+
|Id |Image |Type |User |
+---------+--------------+---------+---------+
|1 |12358.jpg |PI |1 |
+---------+--------------+---------+---------+
|2 |12589.jpg |PI |2 |
+---------+--------------+---------+---------+
|3 |45862.jpg |Other |2 |
+---------+--------------+---------+---------+
|4 |35698.jpg |PI |1 |
+---------+--------------+---------+---------+
第三个“评论”表包含所有评论。
+---------+--------------+---------+
|Id |Comment |User |
+---------+--------------+---------+
|1 |blah blah... |1 |
+---------+--------------+---------+
|2 |blah blah... |1 |
+---------+--------------+---------+
|3 |blah blah... |2 |
+---------+--------------+---------+
我想做的是编写一个返回的查询
Users.Id、Users.UserName、Images.Image(最大 Id 和 Type==PI)、Comments.Id、Comments.Comment
基本上就是连接三个表。
这是我的代码
SELECT U.`Id`, U.`UserName`, I.`Image`, C.`Id`, C.`Comment`
FROM `Users` U
INNER JOIN `Images` I ON I.`Image` = (
SELECT MAX(I.`Image`) FROM `Images` WHERE I.`User` = U.`Id`
) AND I.`Type` = 'PI'
INNER JOIN `Comments` C ON C.`User` = U.`Id`
但这会返回 Images 表中的所有图像。例如,它返回用户 1 的两张图像。我只需要最后上传的图像。
最佳答案
您需要对结果进行降序排序,将最后一个放在顶部,然后将结果限制为 1。类似这样的操作即可:
SELECT U.`Id`, U.`UserName`, I.`Image`, C.`Id`, C.`Comment`
FROM `Users` U
INNER JOIN `Images` I ON I.`User`=U.`Id`
INNER JOIN Comments c ON C.`User` = U.`Id`
WHERE I.`Id` IN ( SELECT MAX(`Id`) FROM `Images` GROUP BY `User` )
ORDER BY I.`Image` DESC
LIMIT 1
关于mysql - 连接三个 MySQL 表并从一个表中获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219284/