我如何在MySQL中捕获特定行的邻居

  • 本文关键字:邻居 MySQL mysql doctrine-orm
  • 更新时间 :
  • 英文 :


我将为您提供我想要的简单示例

说我有一个带有以下ID的文章表(1、2、3、4、5、6、7、8、9、10)

现在,访问者想按文章标题对此文章进行排序

SELECT `articles`.`id`, `articles`.`title`, `articles`.`body`, `authors`.`id`, `authors`.`name` from `articles`
left join `authors` on `articles`.`author_id` = `authors`.`name`
ORDER BY `articles`.`title` ASC, `authors`.`name` ASC;

可能导致以下顺序(5、9、8、6、4、1、3、10、2、7)

然后,访问者访问了第4条的详细页面,现在我想从此页面上浏览他的结果(5、9、8、6、4、1、3、10、2、7)

所以我想捕获文章编号" 6"作为上一篇文章和文章编号" 1"作为下一个文章

在文章详细信息页面中,我如何使用MySQL执行此操作,我只有文章ID和搜索标准和搜索顺序。

注意:解决方案应考虑性能,因为我有一张可能达到1,000,000行的表

在SQL中,您需要使用ROW_NUMBER() OVER之类的东西。MySQL似乎无法使用。请参阅此问题。

这很简单。

上一篇文章将是标题最高(可以说)的文章,它仍然比第4条的标题少。您可以找到这样的标题:

SELECT MAX(title) AS maxTitle
FROM articles
WHERE title < (SELECT title FROM articles WHERE id = 4);

如果要获得该文章的ID,则可以将其加入原始表:

SELECT a.id
FROM articles a
JOIN(
  SELECT MAX(title) AS maxTitle
  FROM articles
  WHERE title < (SELECT title FROM articles WHERE id = 4)) tmp ON tmp.maxTitle = a.title;

要获取下一篇文章,您只需翻转所有条件:

SELECT a.id AS nextArticle
FROM articles a
JOIN(
  SELECT MIN(title) AS maxTitle
  FROM articles
  WHERE title > (SELECT title FROM articles WHERE id = 4)) tmp ON tmp.maxTitle = a.title;

这是一个SQL小提琴示例,其行以相同的方式排序,并且确实按照您的期望返回值6和1。

相关内容

  • 没有找到相关文章

最新更新