Sql Tekrarsiz Randomize Nasil Yapilir
-
selamlar,
soyle bir sql cumlem var:
SELECT p.* FROM category_user c LEFT JOIN products p on c.category_id = p.category_id WHERE c.user_id = 1 ORDER BY rand() LIMIT 10 OFFSET 0
orn: 100 tane total kayit var, bunu her request ile 10 ar 10 ar cekmek istiyorum. ve toplamda atilacak 10 istek herseferinde birbirinden farkli sonuclar dondurmesi gerekiyor.
veritabanina ekstra alan ekleyebilirim gerekirse, veya yola baska turlu bir sorgu ile devam edebilirim.
bu pinterestteki gibi bir akis algoritmasna benzeyecek, yorumlarinizi merak ediyorum
yunusemre tarafından 10/Nis/23 21:47 tarihinde düzenlenmiştir -
SELECT p.* FROM category_user c LEFT JOIN products p on c.category_id = p.category_id WHERE c.user_id = 1 ORDER BY RAND() LIMIT 10 OFFSET (SELECT FLOOR(RAND() * ((SELECT COUNT(*) FROM products WHERE category_id IN (SELECT category_id FROM category_user WHERE user_id = 1)) - 10 + 1)))
-
hacı dayı getirdiğin random 10 kayıt için bigint bi alan oluştur içine timestamp update et.
sonra getirirken order by bigint_sutun DESC yaparak getir.
-
@abdullahazad @EnableTurk tesekkurler hocalar. cevaplar tam olarak istedigime biraz uzak olsa da guzel fikir verdiler yeni bir yol cizdim kendime
-
Hocam once 1 ile 100 arasi sayilari bi listeye atiyorsun. Sonra o listeyi karistiriyorsun (shuffle)
Sonra listenin basindan 10 tane id cekip onlari gosteriyorsun, sonra 2, 10 taneyi, sonra 3. 10 taneyi
listeyi ister dosyaya kaydet, ister dbye kaydet, ister sessionda tut. Senaryona gore sana kalmis.
-
yeni bir field ekle "getrandom" vb gibi. bit olsun içine true bas bütün kolonlara.
daha sonra çekerken
select top 100 * from table Where getrandom<>false order by newid()
şeklinde çek.
elindeki listenin getrandom field'ini false yap ondan sonra yoluna devam et