ugrás a tartalomhoz

Galéria: előző, következő képek

Dualon · 2004. Szep. 7. (K), 18.17
Sziasztok!

Egy galériát szeretnék hegeszteni (PHP4.1+, <5; MySQL 3.23), ami az alábbi alapelveket követi.
Két tábla, egyikben képcsoportok, másikban képek. Egy képcsoportot egy "tárlatként" jelenít meg a rendszer.
Miként oldjam meg, hogy a megjelenő képnél le lehessen kérdezni az előző, illetve következő képet is? (Előző kép - Következő kép kiválasztás)

Gondoltam arra, hogy a képek táblájából az épp lekért kép azonosítójánál eggyel kisebb, illetve nagyobb képet kérem le, de nyilván törlés után ez problémát okoz.
Az is eszembe jutott, hogy egy id-tartományt kérek le, aztán megnézem, van-e előző, következő id...de sem ez, sem a több lekérés nem túl erőforrás-kímélő.

A megoldás során lehetőleg kerülném a képek átnevezését, s - kizárólag elvi megfontolásból, nem lesz túl nagy terhelése egy családi albumnak - jó lenne, ha minél gyorsabb megoldást tudnék létrehozni.

Tudnátok akár elvi ötleteket, akár valami leírást adni e témában? Pár scriptet már átnéztem, de a törlés problémájával nem foglalkoznak; komolyabb CMS-ek átböngészésére pedig sajnos nincs időm.
Előre is köszönöm!
 
1

sql!?

Anonymous · 2004. Szep. 8. (Sze), 09.29
Előző kép:
SELECT id
FROM kepek
WHERE csoport = 'jelenlegi_csoport'
AND id < 'jelenlegi_kep_id-je'
ORDER BY ami_szerint_rendezni_akarod DESC
LIMIT 1

Ha nem hoz egy rekordot sem, akkor a lista elején vagy, egyébként mindig a listában az előzőt hozza.

A következő kép ugyanaz, csak a relációjel fordítva és nincs DESC

Nadi
2

Egy lekérés?

Dualon · 2004. Szep. 8. (Sze), 18.20
Köszönöm a tanácsot, de igazság szerint ezzel nem jutottam sokkal előbbre. Bár valóban nem hangsúlyoztam, de több (jelen esetben akár három, akár kettő) lekérésből meg tudom csinálni a dolgot, igazán az egy lekéréses megoldás hozott volna üdvösséget. ,)

Esetleg egy UNION a querybe? Mit gondoltok róla? Vagy nem érdemes erőltetni az egy lekérést, "annyit nem számít"?

Mindettől függetlenül kösz még egyszer, Nadi!
3

UNION

Anonymous · 2004. Szep. 9. (Cs), 09.35
Az általam javasolt lekérdezések a kérdéses kép előtti utolsó, valamint a kérdéses kép után első rekordot adják meg, amihez más WHERE feltétel tartozik, ezért nem lehet őket egy SELECT-ben megvalósítani.

Ebben az esetben a UNION-t nem tartom jó megoldásnak, mert ha két SELECT-et összekapcsolva csak egy rekordot kapsz eredményül, akkor nem fogod tudni, hogy az az előző, vagy pedig a következő képet jelenti.

Elképzelhető, hogy további bűvészkedéssel meg lehetne oldalni egyetlen SQL utasítással, de szerintem nem éri meg a fáradságot, arról nem is beszélve, hogy nehezebben érthető kód lesz a végeredmény.

Nadi
4

Meggyőztél

Dualon · 2004. Szep. 9. (Cs), 18.53
Köszönöm segítséged, véleményed, meggyőztél!