Mysql - minden x. sor kiolvasása

Tisztelt Kollégák!

Mysql-ben szeretnék kiolvasni egy dinamikusan bővülő táblából minden x. adatot. Konkrétan: minden 200.-at.
A tábla szerkezete:
TABLE `cikk` (
`id` varchar(200) NOT NULL default '',
`nev` varchar(255) NOT NULL default '',
`me` varchar(10) NOT NULL default '',
`netto` int(12) NOT NULL default '0',
`afa` int(3) NOT NULL default '0',
`vt` varchar(255) NOT NULL default '',
`darab` int(11) NOT NULL default '0',
`aktiv` int(11) NOT NULL default '1',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ahol az 'id' mező egyedi, de nem számosság. Számossággal kibővíteni se nagyon lehet, lévén, hogy a rekordok törlődnek is néha, újraszámozás szintén nem jöhet szóba.
Köszönöm előre is.

Hozzászólások

php/akarmiprognyelv, COUNT(*)/200 db UNION, ezeken belul LIMIT 1 limit 200,1 limit 400,1 ...
vagy:
union nelkul ciklusban ugyanez.

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

pontosan N-edik -re nem tudok megoldást, ha újraszámozási lehetőség nincs, csak statisztikailag N-edikre:

vegyél fel egy numerikus mezőt, ahova random integer kerüljön
legyen mondjuk neve code

aztán


select * from cikk where MOD(code, N)=0

ha a code mezőt aktualizálod a lekérdezés előtt nem random, hanem folytonos számokkal, akkor a pontosan N-ediket fogod kapni.

Csináltam egy köztes megoldást:
$limits = 200; // AMi akármennyi lehet, persze.

$qrys = "select darab from cikk";
$doits = mysql_query($qrys);
$numrowss=mysql_num_rows($doits); // Ez amúgyis létező query volt, valami egyébhez.

$qrr = "(select nev from cikk order by nev limit 0, 1 )";
for ($wear = 1; $wear < $pagess; $wear++)
{
$werec = $wear * $limits;
$qrr .= " union (select nev from cikk order by nev limit $werec, 1 ) ";
}
$csik = mysql_query($qrr);
$tk = 1;
while ($o = mysql_fetch_array($csik))
{
$ter[$tk] = $o['nev'];
$tk++;
}
// Most már lehet kezelni a $ter[] tömböt.

Coding for fun. ;)

Ha mysql 5 akkor próbálj tárolt eljárást használni, szaladj benne végig az eredményhalmazon, de csak minden x. elemet add vissza a tárolt eljárás eredményhalmazában.

E java-ból támadd, ott a JDBC-n át a Resultsetben skippelhetsz, bár nem tudom támogatja-e ezt a mysql JDBCDriver-e, illetve a mysql vagymi. :)

Neharagudj, hogy offtopic de k. erdekel miert tombkent hasznalod az sql szervert?

Kicsit rakjuk tisztába a dolgokat. Elmondom, hogy mire kellett nekem ez az egész.
Van egy tetszőleges (kb. 10000 rekordos) táblám, amiből minden 200. elem kell a lapozó generáláshoz. Tudod, az a megoldás, hogy "1 2 3 4 .." típusú lapozót csináljak nem nyert, mert ABC sorrendben olvasom ki a rekordokat, és a kezelőnek látnia kell, hogy az általa keresett tétel melyik 'oldalra' esik. 'A B C D ...' típusú lapozó szintén nem jó, mert nem lehet kontrollálni, hogy bizonyos betűk alá hány rekord esik, 1 lapon pedig nem lehet 200-nál több rekord.
Kérdésedre pedig nem tudok válaszolni, mert nem értem a kérdés lényegét.

Coding for fun. ;)

lehet, hogy totál hibás megoldás, de én az uccsó 15 kiírására (és 15önkénti visszalapozásra a

SELECT id FROM table ORDER BY DESC LIMIT($kezdet,$veg)

megoldást használom, úgy, hogy $veg = $kezdet+15 és meghíváskor mindig a $kezdet értékét adom be...persze figyelni kell, hogy ne akarjak továbblapoztatni annál mint ahány elemem van, de az már részletkérdés :)

esetedben annyi a különbség, hogy order by ASC... és nem az id-re...

Hát igen, kár hogy mysqlben nincs ROWNUM oszlop, de persze ezt is meg lehet kerülni.
Az én megoldásom ez lenne:

SET @n:=0;
SELECT * from (SELECT id,(@n:=@n+1) rownum FROM cikk) t where mod(rownum,200)=0;

Furcsa módom nálam nem működik úgy, ha a modulószámítást is a belső selectben végzem, annak a where feltételeként, mert úgy csak 1 sort ad vissza, vagy annyit se. Igazából nagyon nem néztem utána a dolognak, de talán megfelel így is :)