PHP - SQL:以循环方式获取结果

时间:2009-09-28 22:23:02

标签: php sql mysql

我有一张表,其中包含3个字段:

  • ID
  • 名称
  • 状态

每当我得到结果时,它应该给我5个名字,其状态= 1。 假设db包含以下内容:

id name status
1   A    1
2   B    1
3   C    0
4   D    1
5   E    0
6   F    0
7   H    1
8   I    1
9   J    1
10  K    1
11  L    1
12  M    0

第一次,取回应该返回:A,B,D,H,I(5条记录)
第二次,fetch应返回:J,K,L,A,B(5条记录)

更新:我不想要典型的分页。考虑我有从A1到A12的12个可用名称。第一次获取应该返回A1-A5,第二次获取A6-A10和第三次获取A11,A12,A1,A2,A3。因此,当我到达终点时,我需要从第一个开始获取记录以填充5个插槽。

我在php中使用mysql

3 个答案:

答案 0 :(得分:1)

这看起来像某种作业分配脚本?

你需要两件事:

  • 上次运行脚本时返回的最高ID(lastID)
  • 一个大于表格中最大ID的数字(bigNum)

然后您可以将查询编写为

SELECT
  id, name
FROM
  table
WHERE
  status=1
ORDER BY
  (bignum + id) MOD (bigNum + lastID + 1)
LIMIT 5

Shazaam!

答案 1 :(得分:0)

跟踪返回记录的ID,并执行以下查询:

select top 5 *
from (
    select top 5 * 
    from MyTable
    where status = 1 
        and id not in (1,2,4,7,8)
    order by name
    union 
    select top 5 * 
    from MyTable
    where status = 1 
    order by name
) a

答案 2 :(得分:0)

$q = mysql_query("SELECT name FROM table WHERE status = 1 LIMIT 5);
while ($row = mysql_fetch_row($q))
{
  .... //first 5
}
$q = mysql_query("SELECT name FROM table WHERE status = 1 LIMIT 5,5);
while ($row = mysql_fetch_row($q))
{
  .... //second 5
}

这使用mysql的偏移功能 - 将其视为结果的分页。