这是我的表格和结构
Shoutbox
shoutbox_follower
呐喊
我想为每个用户关注的Shoutbox获取最后一个(最新)的喊叫(Shouts.Text)
我尝试了这个,但它没有用
select shoutbox_follower.SID,shoutbox.title, shouts.text from shoutbox_follower, shoutbox, shouts where shoutbox_follower.uid=1;
但我可以用多个查询来完成工作
SELECT SID from shoutBox_Follower where UID=5
SELECT SID,TEXT from Shouts where SID in ($boxList) order by id desc limit 1
SELECT Title from Shoutbox where SID=? limit 1
答案 0 :(得分:4)
您可以组合查询,例如:
SELECT SID,
(select TEXT
from Shouts
where Shouts.SID = shoutBox_Follower.SID
order by Shouts.SID desc limit 1
) as shout_text
from shoutBox_Follower
where UID=5
对于少量行,它执行速度非常快(假设您拥有所需的索引)。根据您的第三个查询,可以使用简单的内部联接来获取标题。
答案 1 :(得分:1)
在评论中,您提到需要快速解决方案。如果是 - 那么将字段latest_shout_id
添加到shoutbox
表,并使用AFTER INSERT
表shouts
触发器维护它。就是这样。
以下是您可以执行所需操作的查询(假设您在shout_id
表中将shouts
作为PK,并在shoutbox
字段中引用shoutbox_id
:< / p>
SELECT x.*
FROM shoutbox_follower f
INNER JOIN (SELECT MAX(shout_id) shout_id,
shoutbox_id
FROM Shouts s
GROUP BY shoutbox_id) x ON x.shoutbox_id = f.sid
WHERE f.uid = 5
将其更改为相关子查询可能会以更快或更慢的方式更改它,这取决于很多因素。