0

我目前正在使用此查询在我的 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.*。我可以根据 media_id 本身(media_table.media_id 是自动增量)或有其他可用列(例如 media_date)来执行此操作(这可能更准确 - 它是纪元时间格式的 INT 列)。

而且我想通过连接来做到这一点(如果可能的话),所以我不必运行多个查询。

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

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

任何帮助深表感谢。非常感谢您的参与。

4

1 回答 1

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})
      )
于 2013-04-09T09:39:25.643 回答