ugrás a tartalomhoz

Milyen query kéne itt?

therest · 2010. Júl. 17. (Szo), 03.41
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. :)
 
1

adott táblák?

ironwill · 2010. Júl. 17. (Szo), 09.34
Szia!

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.. :)
2

tábla spec

therest · 2010. Júl. 17. (Szo), 13.08
Szia(sztok)!
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.
3

akkor másként.. :)

ironwill · 2010. Júl. 17. (Szo), 13.49
Ok, köszi, ezek nagyjából meg voltak.. :)

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.
4

A feladat

therest · 2010. Júl. 17. (Szo), 16.34
Egy szimpla adminsztrálható képgalériáról van szó. Amikor az oldal betöltődik, be kell szippantani az összes galériát az összes képpel. A html kód végén van egy ajaxos hívás ami hív egy php scriptet, ami előállítja a mysql adatokból az xmlt, ezt az xml-t a böngészőben egy javascript függvény feldolgozza.
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.
5

akkor?

ironwill · 2010. Júl. 17. (Szo), 17.17
Ha több ilyet is csináltál, akkor miért nem csinálod meg a másik verziót és mindjárt össze is tudod hasonlítani őket.. ?

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.
6

A galériák link tagjait

therest · 2010. Júl. 17. (Szo), 18.38
A galériák link tagjait javascriptben a kapott xml (galériák, és gyerekeikként a képek) csatolom a dokumentumhoz. Amikor kattint valamelyik galéria linkre, akkor a xml-ben megkeresem a megfelelő bejegyzést, ennek a gyermekeit - a képeket - pedig egy célterületen megjelenítem. Meg lehetne oldani úgy is, hogy a linkre kattintáskor kérdezi le az adott galériához tartozó képeket, mivel azonban a képek jellege alapján szükséges a galériák rendezése így kell a teljes adat egy lekérdezésből.

Köszi, hogy válaszoltál a 3. pontra, ez volt a lényeg, akkor valóban a kettes ponthoz fogok folyamodni.
7

Nincs mit

ironwill · 2010. Júl. 17. (Szo), 19.25
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..