Php 获取联接中的下一个和上一个记录

Php 获取联接中的下一个和上一个记录,php,mysql,join,left-join,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\u id本身的med

我目前正在使用此查询选择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\u id本身的media\u表来执行此操作。media\u id是自动递增的,或者有其他列可用,例如media\u date。这可能更准确-它是一个纪元时间格式的INT列

如果可能的话,我想通过连接来实现这一点,这样我就不必运行多个查询

这让我想起了这个答案:

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


非常感谢您的帮助。非常感谢您抽出时间。

如果您希望同时获取所有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})
      )

在其中添加子句,as media.media_id={$mediaId}或media.media_id={$mediaId}-1或media.media_id={$mediaId}+1谢谢。若$mediaId为10且ID为9的行已被删除,则我的上一条记录将丢失。在这种情况下,我想返回第8行。不幸的是,这对于我的要求来说太简单了:谢谢。@PHPNewbGallery它有用吗?是的。非常感谢:@phpnewballery,我很荣幸。