如何在MySQL表中的一个特定元素周围(之前和之后)选择固定数量的元素


How do I select a fixed number of elements around (before, and the remainder after) one specific element in a MySQL table?

我需要一个查询(通过php发出)来选择在给定记录周围插入的n条记录(假设为4条)(前n/2+后n/2)。如果在当前元素之前插入的行数小于n/2,则剩余的记录(n-result1)应为在当前记录之后插入的记录。最新唱片也是如此。(选择更多/所有以前的记录)

假设当前记录id为#1,那么查询将给出记录2,3,4,5作为结果如果当前记录为2,则结果为1,3,4,5如果当前记录为3,则结果为1,2,4,5如果当前记录为6,则结果为4,5,7,8

假设表中有9个元素

如果当前记录为8,则结果为5,6,7,9如果当前记录是最后一个(9),则结果为5,6,7,8

n实际上是一个固定值,通过php确定。php的使用(如果在上下文中有用——例如,如果可以使用mysql_last_insert())非常受欢迎

感谢

选择在某个特定ID之前和之后带有和ID的记录并不复杂。关键是按ID排序记录,然后只选择小于或大于特定ID的记录:

SELECT * FROM table WHERE id < x ORDER BY id DESC LIMIT 4;
SELECT * FROM table WHERE id > x ORDER BY id ASC LIMIT 4;

这将为您提供两个记录集,其记录分别位于x之前和x之后。然后,您可以根据记录集的实际大小合并记录,以始终获得最多4条记录。

'SELECT ID
FROM Table
WHERE 
ID > '. ($n - 3) .
' AND ID != '. $n .
' ORDER BY ID ASC LIMIT 4'

这具有作为一个查询的优点。

如果您想解决删除行的问题,实际上您必须执行两个查询