2012-10-22 57 views
1

后选择我有一个表,看起来像MySQL的 - 分拣

ID |value 
-------- 
1 | 10 
-------- 
2 | 30 
-------- 
3 | 20 
-------- 
4 | 20 
-------- 
5 | 10 
-------- 

我在使用LIMIT降序排列,并选择前两行排序。

所以选择查询返回:

-------- 
2 | 30 
-------- 
3 | 20 
-------- 

现在我想选择排序以同样的方式,第二两行这样的结果应该是:

-------- 
4 | 20 
-------- 
1 | 10 
-------- 

我该怎么做?

查询必须是一个动态查询 选择之后,我指的是两排,我应该选择接下来的两行等等,直到表的末尾。

重要宣言

查询必须从以前的选择采取最后一个ID,并自动生成接下来的两个。对不起,我忘了说我第一次发布这个问题。

+0

你有没有排序的价值? – ntvf

+0

是我按价值排序 – Fady

+0

我编辑了这个问题,这样你就可以明白问题是什么:) – Fady

回答

2

可以使用LIMIT条款的OFFSET部分:

LIMIT 2 OFFSET 2; 

这将允许你限制的结果开始后,指定的偏移量,在这种情况下 - 在第二行之后。

UPDATE(动态查询?)
要选择/偏移的动态,你需要处理的那部分在PHP。我假设你正在拉动记录,对他们做些什么,然后拉下一组?如果这是正确的,你可以只保留了你多少次迭代做了一个计数器:

$offsetCounter = 0; 
// start your loop, based on whatever you need (for, while, etc.) 
    $limit = 'LIMIT 2 OFFSET ' . (2 * $offsetCounter++); 
    // append `$limit` to the end of your query 
    $query = 'SELECT ID, value FROM yourTable ORDER BY value DESC ' . $limit; 

更新#2(动态查询,没有OFFSET
如果您不能使用OFFSET,或至少有一个计数器来实现它,但你可以使用最后一个记录检索到的ID,你可以将其添加到你的WHERE子句(我也建议在这种情况下通过ID字段进行排序)。

类似下面应该工作(更新在必要时使用准备好的语句):

$lastIdSelected = 0; 
// start your loop 
    $query = 'SELECT ID, value FROM yourTable'; 
    $query .= (($lastIdSelected != 0) ? ' WHERE id > ' . $lastIdSelected : ''); 
    $query .= ' ORDER BY value DESC, id ASC LIMIT 2'; 
    // execute query, do your work, etc. 

    // on your last record, do: 
    $lastIdSelected = $row['ID']; 

当然,这也需要遵循与OFFSET可变我的第一个更新的格式。你可以修改它到而不是使用一个临时变量来存储最后一个ID,但它可能最终是同样数量的工作。

+0

现在你明白了。但问题是我没有能力使用这个$ offsetCounter ..我得到的是最后一个选择的第二行的ID – Fady

1

您可以使用OFFSET

$sql = 'SELECT ID, value FROM myTable LIMIT 0, 2 ORDER BY value DESC; 

上述会给你的前两行。

$sql = 'SELECT ID, value FROM myTable LIMIT 2, 2 ORDER BY value DESC; 

这会给你接下来的两行上LIMIT

的更多信息,可以发现here