在连接中获取下一个和上一个记录

时间:2013-04-09 09:31:13

标签: php mysql join left-join

我目前正在使用此查询在我的PHP应用程序中选择媒体记录并获取相关的用户数据(如果有):

SELECT media.*,
user.*
FROM media_table AS media
LEFT JOIN user_table AS user ON
    (user.user_id = media.user_id)
WHERE media.media_id = {$mediaId}

我感兴趣的是选择媒体。*用于下一个可用的media_table记录和之前的media_table记录。我可以基于media_id本身(media_table.media_id是自动增量)或者还有其他可用的列,例如media_date(这可能更准确 - 它是以纪元时间格式的INT列)。

我想通过连接执行此操作(如果可能),因此我不必运行多个查询。

这让我想起了这个答案:https://stackoverflow.com/a/1446831/1593325

它给了我一些想法,但我无法让它工作(除非我运行单独的查询)。

非常感谢任何帮助。非常感谢你的时间。

1 个答案:

答案 0 :(得分:1)

如果您希望同时获取所有3行,则可以修改WHERE子句以满足您的要求。修改后的查询将是:

SELECT media.*,
user.*
FROM media_table AS media
LEFT JOIN user_table AS user ON
    (user.user_id = media.user_id)
WHERE (media.media_id = {$mediaId} 
       or media.media_id = ({$mediaId}-1) 
       or media.media_id = ({$mediaId}+1))

更新 在这种情况下,您可以将查询用作

SELECT media.*,
user.*
FROM media_table AS media
LEFT JOIN user_table AS user ON
    (user.user_id = media.user_id)
WHERE (media.media_id = {$mediaId} 
       or media.media_id = (SELECT MIN(media_id ) FROM media_table 
                           where media_id > {$mediaId}) 
       or media.media_id = (SELECT MAX(media_id ) FROM media_table
                           where media_id < {$mediaId})
      )