簡體   English   中英

PHP-SQL:以循環方式獲取結果

[英]PHP - SQL: fetching results in round robin fashion

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

  • ID
  • 名稱
  • 狀態

每次獲得結果時,它應該給我5個狀態= 1的名稱。假設數據庫包含以下內容:

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條記錄)
第二次,訪存應返回:J,K,L,A,B(5條記錄)

更新 :我不希望典型的分頁。 考慮一下我有12個可用的名字,從A1到A12。 第一次讀取應返回A1-A5,第二次讀取A6-A10,第三次返回A11,A12,A1,A2,A3。 因此,當我到達結尾時,我需要從第一個開始獲取記錄以填充5個插槽。

我正在用mysql在php中進行操作

這看起來像某種工作分配腳本嗎?

您需要兩件事:

  • 上次運行腳本時返回的最高ID(lastID)
  • 一個大於表中最大ID(bigNum)的數字

然后,您可以將查詢寫為

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

跟蹤返回的記錄的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
$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的offset功能-將其視為您的結果的分頁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM