MYSQL LIMIT másként
Sziasztok!
Lenne egy problémám, amit nem igazán tudom, hogyan érdemes megcsinálni úgy, hogy ne egyesével kérdezzem le a rekordokat.
Csinálok egy oldalt, ami mobiltelefonra készült, ahol nagyon kötött ugye, hogy egy oldalra mennyi szöveg mehet. Az oldalon hozzászólások lennének egymás alatt felsorolva.
Az, hogy hány hozzászólás kerüljön egy oldalra, az függ attól, hogy egy hozzászólás milyen hosszú.
Pl. ha a hozzászólások 300 karakter hosszúak, akkor lehet 3 kifér egy oldalra, de ha csak 30 karakter hosszúak, akkor jóval több is. A szépsége ugye hogy a felhasználóktól függően minden hozzászólás eltérő hosszú lesz.
Ebből adódóan nem tudom használni a LIMIT paramétert, mert nem tudom hány rekordra van szükségem.
A fapados megoldás, hogy egyesével olvasgatom a rekordokat külön-külön SELECT-tel, és vizsgálom kell -e még, de szerintem ez eléggé terhelő lehet nagy forgalom esetén.
Milyen megoldást ajánlanátok ti?:
-megtudjam, mennyi hozzászólás fér el egy-egy oldalon (legalábbis mennyit kérjek le az adatbázisból)
-hány oldalra férnek el a hozzászólások összesen (ez nem annyira lényeg, max nem írom ki hány oldal van)
- miként tudom meghatározni, hogy hány rekordot kell beolvasnom ha egy oldalról visszább lépek az előzőre.
Mindenki segítségét előre is köszönöm.
Üdv:
Zoli
■ Lenne egy problémám, amit nem igazán tudom, hogyan érdemes megcsinálni úgy, hogy ne egyesével kérdezzem le a rekordokat.
Csinálok egy oldalt, ami mobiltelefonra készült, ahol nagyon kötött ugye, hogy egy oldalra mennyi szöveg mehet. Az oldalon hozzászólások lennének egymás alatt felsorolva.
Az, hogy hány hozzászólás kerüljön egy oldalra, az függ attól, hogy egy hozzászólás milyen hosszú.
Pl. ha a hozzászólások 300 karakter hosszúak, akkor lehet 3 kifér egy oldalra, de ha csak 30 karakter hosszúak, akkor jóval több is. A szépsége ugye hogy a felhasználóktól függően minden hozzászólás eltérő hosszú lesz.
Ebből adódóan nem tudom használni a LIMIT paramétert, mert nem tudom hány rekordra van szükségem.
A fapados megoldás, hogy egyesével olvasgatom a rekordokat külön-külön SELECT-tel, és vizsgálom kell -e még, de szerintem ez eléggé terhelő lehet nagy forgalom esetén.
Milyen megoldást ajánlanátok ti?:
-megtudjam, mennyi hozzászólás fér el egy-egy oldalon (legalábbis mennyit kérjek le az adatbázisból)
-hány oldalra férnek el a hozzászólások összesen (ez nem annyira lényeg, max nem írom ki hány oldal van)
- miként tudom meghatározni, hogy hány rekordot kell beolvasnom ha egy oldalról visszább lépek az előzőre.
Mindenki segítségét előre is köszönöm.
Üdv:
Zoli
Biztos jo elgondolas?
Köszi a gyors választ
Amit mondasz az nagyon logikus és én is így csinálnám, de sajnos telefonra készült WAP (WML és XHTML) oldalakról van szó, így kiesett a JavaScript.
Kiesett az is hogy minden hozzászólást egyesével ki kellene fejteni, mert a sok nyomogatás miatt használhatatlan lenne az oldal.
A fix darabszámot azért tartottam rossz megoldásnak, mert ha 50 felhasználó csak egy-egy vigyort nyom, akkor elég idegesítő 2-3 vigyoronként lapozgatni, holott lehet 30 is kiférne egy oldalra.
Üdv:
Zoli
??
Kérdés, most hogy tudok pozícionálni előre és hátra.
Feltételezve, hogy ez a jó kiindulási alap.
Zoli
Egy lehetséges magoldás
Eljutottam egy lehetséges megoldáshoz, de nem tudom hogy esetleg ennél nincs -e jobb, vagy hatékonyabb, mert itt dupla select van.
Vagy más ötlet?
Üdv:
Zoli
előre letárolás
Üdv,
Felhő
re
Üdv:
Zoli
???
Elméletileg ennek is kellene menni:
Mindig 0-nak értelmezi, mert ha 0-át írok, akkor az összes rekordot kiírja, ha mást, akkor nem talál semmit.
Mi lehet ennek az oka.
Próbáltam HAVING-el is, de úgy is semmi.
Ha az egész után egy másik SELECT-ben kiíratom a @groupom változót akkor érdeke módon benne van az utolsó oldal száma.
Tehát miért nem működik a WHERE-ben az ellenőrzés, mert akkor lehet meg lehetne egy SELECT-et spórolni.
Előre is köszi.
Üdv:
Zoli
a where után értékelődik ki
A WHERE is ebbe a kategóriába esik, így marad az, hogy subquery-be teszed, és a külső queryben szűrsz.
Üdv,
Felhő
kár
Tehát ha jól értem a CASE WHEN-en belül bár tudom mind a @szamol mind pedig a @groupom változót figyelni , elemezni, viszont a WHEN részben ezen változókra nem hivatkozhatok. Vagyis igen, de a teljes SELECT lefutásáig a kezdőértéket fogom bennük látni.
:(
Akkor ezek szerint max az oldalak számának meghatározásánál tudom így használni amikor is elég a végén megtudnom, hogy a @groupom változó végül mekkora értéken állt meg.
Az egymásba ágyazott SELECT futásilag mennyit jelent terhelés és idő szempontjából?
Esetleg a két CASE WHEN-t nem lehetne valahogy kiváltani úgy, hogy csak egy feltételvizsgálat legyen? Igazából a @groupom-ra van csak szükségem, a @szamol-t elég ha csak számolja. Csak nem tudtam azt megoldani, hogy két műveletet tudjak elvégezni egyszerre.
Előre is köszi.
Zoli