MSSQL; A lekérdezés adott számú sort adjon vissza
2021-09-27T13:05:14+02:00
2021-09-30T09:19:05+02:00
2022-08-12T04:41:46+02:00
Lumpen
Sziasztok!
 
Van egy ilyen (amúgy remekül működő) lekérdezésem:

SELECT top 25 RND(-TIMER()),*  FROM `kerdesek` where id>0 and temakor=4 order by rnd(id);

Viszont előfordul olyan témakör, amiből nincs 25 rekord összesen. Így a top 25 ellenére (nyilvánvalóan) nem fog 25 sort visszaadni.
Hogy lehetne azt megoldani, hogy ilyen esetben is 25 sor legyen? 
Nyilván az adott témakörből nem tud 25-öt visszaadni, ha egyszer nincs benne annyi, csak ha ismétlődnek, de az nekem tökéletes lenne.
 
Pl, ha a 4-es témakörben csak 1 találat lenne, akkor azt az egyet adja vissza 25-ször.
 
Esetleg még az is jó lehet, ha a maradék sorok kiválasztása már nem a 4-es témakörből történik, hanem az összes többiből, de erre már végképp nincs ötletem...
 
Az adatbázis Access 2000 formátumú.
 
Köszönöm!
Mutasd a teljes hozzászólást!

  • Szia,

    ha nincs annyi sor az eredményben, a plusz sorokat mivel szeretnéd kitölteni?
    Miért lényeges, hogy "25" sort kapj vissza mindig?
    Mert alapvetően a top/limit arra szolgál, hogy a megadottól több sort ne kapj vissza kevesebbet igen.

    üdv
    Rada
    Mutasd a teljes hozzászólást!
  • szia, 

    minden témakörből felveszel 25 fiktív sort,  amiben valami szisztematikus marhaság van, 
    így a lekérésnél mindig lesz 25 sorod, a marhaság alapján meg látod majd, hogy ezek közül mennyi az érdemi. 

    amúgy ha megosztanád, hogy minek is kötelezően X sor, akkor tanulhatnék belőle, mert ilyen 
    dologgal még nemigen találkoztam...
    Mutasd a teljes hozzászólást!
  • Pl, ha a 4-es témakörben csak 1 találat lenne, akkor azt az egyet adja vissza 25-ször.
    Az eredeti táblád cross join-olod egy másik táblával, amiben biztos van 25 sor:

    SELECT top 25 RND(-TIMER()), k.* FROM `masik_tabla_legalabb_25_sorral` x, `kerdesek` k where k.id>0 and k.temakor=4 order by rnd(k.id);
    Esetleg még az is jó lehet, ha a maradék sorok kiválasztása már nem a 4-es témakörből történik, hanem az összes többiből, de erre már végképp nincs ötletem...
    Pedig ez sem lehetetlen:

    SELECT top 25 RND(-TIMER()),* FROM `kerdesek` where id>0 order by Abs(temakor-4), rnd(id);
    Mutasd a teljes hozzászólást!
  • Ugyanaz, mint Gyümé, csak IF-el, nem ABS-al :D

    SELECT RND(-TIMER()) FROM `kerdesek` WHERE id>0 ORDER BY IF(temakor=4,0,1) ASC, rnd(id) LIMIT 25;
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd