首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql中使用order by捕捉特定行的邻居?

如何在mysql中使用order by捕捉特定行的邻居?
EN

Stack Overflow用户
提问于 2015-05-07 02:20:19
回答 2查看 320关注 0票数 0

我将给你一个简单的例子来说明我想要什么

假设我有一个包含以下I的文章表(1,2,3,4,5,6,7,8,9,10)

现在,访问者希望按照文章标题和作者姓名对这篇文章进行排序,因此查询将如下所示

代码语言:javascript
复制
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行的表

EN

回答 2

Stack Overflow用户

发布于 2015-05-07 02:38:12

在SQL中,您可能希望使用像ROW_NUMBER() OVER这样的东西。这似乎在MySql中不可用;请参阅this question

票数 0
EN

Stack Overflow用户

发布于 2015-05-07 02:40:34

这是相当简单的。

前一篇文章将是标题最高(可以说)的文章,它仍然小于文章4的标题。您可以这样找到:

代码语言:javascript
复制
SELECT MAX(title) AS maxTitle
FROM articles
WHERE title < (SELECT title FROM articles WHERE id = 4);

如果您想要获取该文章的id,可以将其连接回原始表:

代码语言:javascript
复制
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;

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

代码语言:javascript
复制
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 Fiddle示例,它的行的排序方式与您的相同,并且如您所愿返回值6和1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30084643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档