Milyen query kéne itt?
Kicsit php/js is képbe kerül de talán leginkább adatbázis témakör. Mysql adatbázisról van szó.
Két tábla: galériák és galériaképek, sok adat, amiket az oldal betöltődésekor maradéktalanul be kell olvasni. A táblákban található adatokból egy vagy több ajaxxal hívott script állít elő XML-t.
A kérdés a következő: Mi lenne a legideálisabb lekérdezés egy ilyen egyszerű struktúrához, a sebességet előtérbe helyezve, de a könnyű XML építést is figyelembe véve?
Egyetlen query valami frankó joinnal? És ebben az esetben hogyan festene ez?
Létezik-e olyan query ami olyan record struktúrát ad vissza, ahol a jobbról érkező recordok a balról érkező rekordokban találhatóak meg valamilyen formában. Tehát PHPban a fetchelt record rendelkezne egy "kepek" taggal: $record->kepek[].
Vagy két külön script fájl, egyik lekérdezi az egyik tábla tartalmát, másik a másikét, majd kliens oldalon rendezem össze őket megfelelő rendszerbe (a galériák xml-jét bővítve, a galériaképek xml-jéből nyerte adatokkal). Így gyakorlatilag két nagyon egyszerű queryt kapnék, ugyanakkor két ajax hívás történik, és két query mégsem egy. :)
■ Két tábla: galériák és galériaképek, sok adat, amiket az oldal betöltődésekor maradéktalanul be kell olvasni. A táblákban található adatokból egy vagy több ajaxxal hívott script állít elő XML-t.
A kérdés a következő: Mi lenne a legideálisabb lekérdezés egy ilyen egyszerű struktúrához, a sebességet előtérbe helyezve, de a könnyű XML építést is figyelembe véve?
Egyetlen query valami frankó joinnal? És ebben az esetben hogyan festene ez?
Létezik-e olyan query ami olyan record struktúrát ad vissza, ahol a jobbról érkező recordok a balról érkező rekordokban találhatóak meg valamilyen formában. Tehát PHPban a fetchelt record rendelkezne egy "kepek" taggal: $record->kepek[].
Vagy két külön script fájl, egyik lekérdezi az egyik tábla tartalmát, másik a másikét, majd kliens oldalon rendezem össze őket megfelelő rendszerbe (a galériák xml-jét bővítve, a galériaképek xml-jéből nyerte adatokkal). Így gyakorlatilag két nagyon egyszerű queryt kapnék, ugyanakkor két ajax hívás történik, és két query mégsem egy. :)
adott táblák?
Mennyire adottak a táblák? Te határozod meg a tartalmukat? Képeket stb, nem szoktak adatbázisban tárolni, mert:
1. az adatbázis/adattábla nagy méretűre hízhat pláne egy galéria esetén (célra vezetőbb, a képeknek csak az elérésiútját tárolni)
2. a lassabbb sql futási, fájl elérési sebesség miatt
(vannak esetek amikor szükséges lehet, de akkor tudatosan vállalják a hátrányait)
Jó lenne valami átláthatóbb tábla struktúra, hogy pontos választ tudjunk adni, de igen: megoldható a két tábla lekérdezése 1 query-vel. Aztán, hogy mit szedsz ki belőle, csak tőled függ - amit előtte beletettél.. :)
tábla spec
Nincsenek a képek blobban tárolva ha erre gondolsz. :) Egyszerűen a fájlnév van megadva a második táblában. Ilyen szimplán:
TABLE galériák
id BIGINT
név VARCHAR 100
TABLE galériaképek
id BIGINT
gid BIGNT (ezzel kapcsolom a galériák táblához)
fájlnév VARCHAR 100
Egy joinnal lekérdezhető a fenti struktúra , de ilyenkor ugye több record lesz egyetlen galériához, annyi ahány képet tartlamaz.
'SELECT r.*,i.filename AS filename FROM `references` AS r LEFT JOIN `references-images` AS i ON r.id=i.ownerid'.
Phpban a fecthelős while ciklusban aztán lehet vizsgálgatni hogy a soron következő record még az adott galériához tartozik e, vagy már egy másikhoz, és ez nem olyan szimpatikus.
Ezért ez a kérdés:
Létezik-e olyan query ami olyan record struktúrát ad vissza, ahol a jobbról érkező recordok a balról érkező rekordokban találhatóak meg valamilyen formában. Tehát PHPban a fetchelt record rendelkezne egy "kepek" taggal: $record->kepek[].
A kérdés a mysql képes-e ilyen struktúrát előállítani, ha igen, akkor milyen queryvel.
akkor másként.. :)
Inkább azt kérdezem, hogy mit szeretnél csinálni, mert nem vagyok teljesen biztos, hogy amit kitaláltál, működhet így.
A feladat
A lényeg hogy az előállított xmlben a kép elemek a galéria elemek gyerekei nyilván.
Írtam több ilyet , ezért nem a megvalósíthatóság a kérdés, hanem a legjobb módszer kiválasztása, ezekről van szó:
1. Két ajaxos lekérés, két egyszerű xml előállítása, ezek összefűzése javascriptben.
2. A szimpla joinos query, amit az előző postban leírtam Ez a join jellegéből adódóan azonban annyi recorddal fog visszatérni ahány kép van, ez a rekordok száma, és strukturálatlansága miatt nem olyan szimpatikus.
3. Ismét: Létezik-e olyan query ami olyan record struktúrát ad vissza, ahol a jobbról érkező recordok a balról érkező rekordokban találhatóak meg tömb tagként. Tehát PHPban a fetchelt record rendelkezne egy "kepek" taggal: $record->kepek[].
A kérdés a mysql képes-e ilyen struktúrát előállítani, ha igen, akkor milyen queryvel.
Létezik e 3-as, és sebesség szempontból melyik lenne a legjobb.
akkor?
3:
Az sql-ből kapott adatok 2 dimenziósak - sorok és oszlopok. Nem fogsz tudni még egy mélységnyi adatot kiszedni.
És még mindig nem tudom, hogy egyszerre akarod az összes galériát, az összes képpel kiíratni.. vagy csak felsorolni a galériákat.. vagy csak egy konkrét galéria képeit kiíratni.. mert ehhez mindegyikhez más-más query kell..
Én a 2-es csinálnám meg, de nekem nincs összehasonlítási alapom.
A galériák link tagjait
Köszi, hogy válaszoltál a 3. pontra, ez volt a lényeg, akkor valóban a kettes ponthoz fogok folyamodni.
Nincs mit
Azért én megpróbálnék valami mást kitalálni, mert ha egyszerre kéred le az adatokat és írod be a html oldalba, akkor az egy darabig eltarthat, a galéria méretétől függően..