PHP - SQL: round robin moda getiriliyor sonuçları

3 Cevap php

I 3 alanlardan oluşan bir tablo vardır:

  • kimlik
  • isim
  • durum

Every time I get the results, it should give me 5 isims whose durum = 1. Suppose the db contains following:

kimlik isim durum
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

1st time, fetch should return: A,B,D,H,I (5 records)
2nd time, fetch should return: J,K,L,A,B (5 records)

UPDATE: Ben tipik pagenation istemiyorum. Ben A12 A1 den 12 mevcut isimleri var düşünün. Getirme birinci, ikinci A6-A10 almak ve üçüncü A11 getir, A1-A5 dönmelkimlikir A12, A1, A2, A3. Ben sonuna ulaştığınızda Yani, ben 5 yuvalarını doldurmak için ilk başlayarak kayıtlarını almak gerekir.

i mysql ile php bunu yapıyorum

3 Cevap

Bu iş tahsis yazısının çeşit gibi görünüyor?

Size 2 şey gerekir:

  • yüksek kimlik komut çalıştırıldı son kez döndü (lastID)
  • tabloda verilen maksimum kimliği (bignum) daha büyük bir sayı

Sonra gibi sorgu yazabilirsiniz

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

Shazaam!

Döndürülen kayıtların kimlikleri takip edin ve aşağıdaki sorgular yapın:

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
}

Bu mysql-düşünüyorum sonuçlar için pagination olarak bunu ofset işlevselliğini kullanır.