我目前正在使用此查询在我的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
它给了我一些想法,但我无法让它工作(除非我运行单独的查询)。
非常感谢任何帮助。非常感谢你的时间。
答案 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})
)