Sql 获取查询前后的行
我目前有这个问题Sql 获取查询前后的行,sql,mysql,Sql,Mysql,我目前有这个问题 SELECT short_url, type, file_thumbnail, file_embed, media.id, user, media.file_url, votes, comments, GROUP_CONCAT(info.itemTime) AS time, info.title, me
SELECT short_url,
type,
file_thumbnail,
file_embed,
media.id,
user,
media.file_url,
votes,
comments,
GROUP_CONCAT(info.itemTime) AS time,
info.title,
media.time AS oldTime,
media.title,
info.topic,
GROUP_CONCAT(votes) AS totalVotes,
GROUP_CONCAT(votes) AS listVotes,
GROUP_CONCAT(comments) AS listComments,
GROUP_CONCAT(url) AS listSites
from info JOIN
media on info.mid=media.id
WHERE media.id='$id'
GROUP BY mid
ORDER BY media.id DESC
LIMIT 0,1
我添加了一个新功能,可以让您轻松导航到上一个或下一个项目。是否有一种简单的方法来修改上述查询,以便它提取上一行、当前行和下一行?或者只做另一个查询会更容易吗?您可以尝试使用初始查询提取多行,即一页结果,然后在前端导航该数据。如果您需要从数据库中获得即时准确的数据,我认为除了执行额外的查询之外没有其他方法。您可以尝试使用初始查询提取多行,即一页结果,然后在前端导航该数据。如果您需要从数据库中获取最新的精确数据,我认为除了执行额外的查询之外,没有其他方法。您可以使用union来获取上一行和下一行:
SELECT
...
FROM info
INNER JOIN media
ON info.mid = media.id
WHERE media.id < '$id'
GROUP BY mid
ORDER BY media.id DESC
UNION ALL
SELECT
...
FROM info
INNER JOIN media
ON info.mid = media.id
WHERE media.id = '$id'
GROUP BY mid
ORDER BY media.id DESC
UNION ALL
SELECT
...
FROM info
INNER JOIN media
ON info.mid = media.id
WHERE media.id > '$id'
GROUP BY mid
ORDER BY media.id ASC
但是,如果您的用户每次导航时都希望看到上一个项目或下一个项目,那么您仍然要点击数据库以获取下一个项目,无论他们在哪个方向导航
我建议您一次拖动一个页面,然后在前端导航。您可以使用联合来获取上一行和下一行:
SELECT
...
FROM info
INNER JOIN media
ON info.mid = media.id
WHERE media.id < '$id'
GROUP BY mid
ORDER BY media.id DESC
UNION ALL
SELECT
...
FROM info
INNER JOIN media
ON info.mid = media.id
WHERE media.id = '$id'
GROUP BY mid
ORDER BY media.id DESC
UNION ALL
SELECT
...
FROM info
INNER JOIN media
ON info.mid = media.id
WHERE media.id > '$id'
GROUP BY mid
ORDER BY media.id ASC
但是,如果您的用户每次导航时都希望看到上一个项目或下一个项目,那么您仍然要点击数据库以获取下一个项目,无论他们在哪个方向导航
我建议您一次拖动一个页面,然后在前端导航。您可以使用子查询来获取上一条记录和下一条记录的id:
...
where media.id in (
'$id',
(select max(id) from media where id < '$id'),
(select min(id) from media where id > '$id')
)
...
您可以使用子查询获取上一条记录和下一条记录的id:
...
where media.id in (
'$id',
(select max(id) from media where id < '$id'),
(select min(id) from media where id > '$id')
)
...
以下是您的应用程序应努力维护的几个关键点: 不要加载过多的数据。您不知道用户是否将使用上一行/下一行。 尽可能使用稳定的URL,使URL健全。URL不应表示您希望成为第127行的下一个3。 记住这些目标,我建议在单击下一行链接时,页面提取下一行的ID,然后重定向到该行的永久链接。例如: http://example.com/media/1337/prev 应运行:
SELECT id FROM media WHERE media.id < 1337 ORDER BY media.id DESC LIMIT 1
SELECT id FROM media WHERE media.id > 1337 ORDER BY media.id ASC LIMIT 1
然后重定向到,大概,http://example.com/media/1338.以下是应用程序应努力维护的几个关键点: 不要加载过多的数据。您不知道用户是否将使用上一行/下一行。 尽可能使用稳定的URL,使URL健全。URL不应表示您希望成为第127行的下一个3。 记住这些目标,我建议在单击下一行链接时,页面提取下一行的ID,然后重定向到该行的永久链接。例如: http://example.com/media/1337/prev 应运行:
SELECT id FROM media WHERE media.id < 1337 ORDER BY media.id DESC LIMIT 1
SELECT id FROM media WHERE media.id > 1337 ORDER BY media.id ASC LIMIT 1
然后重定向到,大概,http://example.com/media/1338.您真的想要数据库中的下一行吗?您的数据是否在info.id上建立索引?如果不是,您的下一行可能不是您期望的项目。如果您需要更改项目的顺序,您会怎么做
你可以考虑在信息上使用NExtID和PrimouSuiID作为字段,然后考虑< /P>
SELECT
...
FROM info current_info
INNER JOIN media current_media
ON current_info.id = current_media.id
INNER JOIN info prev_info
ON prev_info.id = current_info.previous_id
INNER JOIN media prev_media
ON prev_info.id = prev_media.id
INNER JOIN info next_info
ON next_info.id = current_info.next_id
INNER JOIN media next_media
ON next_info.id = next_media.id
WHERE current_media.id = '$id'
这样做的优点是总是返回一行。为什么这么好?如果没有“上一行”或“下一行”,如何判断返回的两行是“上一行”和“当前行”,还是“当前行”和“下一行”
它也更易于管理,因为您可以通过更改项目的兄弟ID来重新排序项目
警告:上述代码可能无法工作,我的笔记本电脑上没有sql客户端。但希望它能为您指明一个好的方向您真的想要数据库中的下一行吗?您的数据是否在info.id上建立索引?如果不是,您的下一行可能不是您期望的项目。如果您需要更改项目的顺序,您会怎么做
你可以考虑在信息上使用NExtID和PrimouSuiID作为字段,然后考虑< /P>
SELECT
...
FROM info current_info
INNER JOIN media current_media
ON current_info.id = current_media.id
INNER JOIN info prev_info
ON prev_info.id = current_info.previous_id
INNER JOIN media prev_media
ON prev_info.id = prev_media.id
INNER JOIN info next_info
ON next_info.id = current_info.next_id
INNER JOIN media next_media
ON next_info.id = next_media.id
WHERE current_media.id = '$id'
这样做的优点是总是返回一行。为什么这么好?如果没有“上一行”或“下一行”,如何判断返回的两行是“上一行”和“当前行”,还是“当前行”和“下一行”
它也更易于管理,因为您可以通过更改项目的兄弟ID来重新排序项目
警告:上述代码可能无法工作,我的笔记本电脑上没有sql客户端。但希望它能为您指明一个好的方向要么取消限制,要么增加它将返回的行数要么取消限制,要么增加它将返回的行数