ugrás a tartalomhoz

MYSQL

kasza68 · 2014. Május. 11. (V), 18.56
Sziasztok!
Hogyan tudok olyan lekérdezést készíteni egy elég nagy adatbázisból, hogy pl. 2000 recordból 500-at szeretnék kiválogatni (Egységes léptékben ... ha lehet) úgy hogy az első és az utolsó recordot is tartalmazza a lekérdezés.

Előre is köszönöm, ha valaki tudja a választ.
 
1

Ha valaki nem értené, a

Vilmos · 2014. Május. 11. (V), 19.52
Ha valaki nem értené, a részleteket megtalálja itt:
Másik fórum
3

Válaszok

Pepita · 2014. Május. 12. (H), 13.45
Kapott is ott válaszokat, igaz nem valami jókat.
Kellene tudni, hogy van-e egyedi ID, és előfordul-e, hogy rekordot törölnek.
Akkor talán meg lehet oldani 3 lekérdezéssel, nem kell PHP-ben válogatni az adatok közt. A pontosan 500 darab adat kicsit necces lesz, ha az adatsűrűségben nincs semmilyen szabály (pl. mindig x időnként kerül be egy adat).

Szerk.: Tehát egy kicsit jobban ki kéne fejteni a kérdést és leírni, hogy milyen mezők vannak a táblában.
2

Nem valami szep megoldas

szeber · 2014. Május. 12. (H), 00.41
MySQL-ben van ra egy nem valami szep megoldas, ami nagy mennyisegu adatnal eleg lassu lesz. Lenyege, hogy hozzaadsz egy sor szamlalo mezot a lekerdezeshez es a modulo operatorral megoldod. Ez esetben az utolso sor nem garantalt, hogy benne lesz az eredmenyhalmazban, de ez egy union-nal hozzarakhato. Ha garantalt, hogy egyesevel novekszik az ID mezod erteke, es aszerint van rendezve az adat ugy, hogy nem marad ki ID, akkor szamlalo mezo nelkul is megoldhato a lekerdezes.

Pl:

SET @row_number:=0;
SELECT @row_number:=@row_number+1 AS row_number,* FROM tabla HAVING row_number % 4 = 1;
Termeszetesen a 4 helyett a megfelelo szamot kell hasznalnod. Ez a peldadban irt 2000 sorszam melletti 500 ertek eseten mukodni fog, tort szamoknal mar problemasabb a dolog.

Mivel a row_number mezo erteket az osszes, a WHERE feltetelen tuljutott ertekre ki fogja szamolni a szerver, ezert ha sok adat jut tul ezeken a felteteleken, akkor eleg lassu lesz.