如何从mysql表中获取前5条和最后1条记录?

4

我正在开发一个小型php项目,这里我需要从记录的开头获取前5条记录和最后1条记录。我不知道如何编写一个单独的mysqli查询。

非常感谢您的帮助。


2
请查看UNION关键字,将两个SQL查询的结果合并为一个。 - Calimero
2个回答

8

SQL表代表无序集合。因此,除非某个列明确定义了排序,否则不存在前五行或最后一行等概念。

通常,表具有某种自动递增的id列,可用于此目的。如果是这样,您可以执行以下操作:

(select t.*
 from t
 order by id asc
 limit 5
) union all
(select t.*
 from t
 order by id desc
 limit 1
);

注:

  • 有时,插入日期/时间列是适合使用的列。
  • 您要使用union all而不是union--除非您想承担删除重复值的开销。
  • 对于这个公式,如果少于6行,则会出现一个重复项。

很好的答案。我不知道UNION ALL和重复问题。 - Calimero
嘿 @Gordon Linoff,如果表中只有五条记录,那么当存在重复记录时,查询结果会首先返回前五条记录,然后最后一条记录也会包含在查询结果中吗? - OLE
1
如果你想要六条记录,那么请使用 UNION ALL。如果你只需要五条记录,那么请使用 UNION。@UmarShahzad - Gordon Linoff

5
联合操作符允许这样做,它会小心地操纵ORDER BY和LIMIT子句:
(SELECT * FROM table ORDER BY field ASC LIMIT 5)
UNION
(SELECT * FROM table ORDER BY field DESC LIMIT 1)

我建议您接受下面 @Gordon Linoff 的答案,他已经很好地解释了 UNION ALL 的具体细节和优点,如果这对您的情况有帮助的话 :-) - Calimero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接