Lahendus: eelmine/järgmine lingid
Mina lahendasin selle probleemi nii:
SELECT id FROM pictures WHERE parent_album = 4;
Tulemuseks kõigi piltide ID-d, need loen järjendisse sisse. Nüüd, mõnd pilti vaadates toimub järgnev:
// id tuleb url-ist, image_list on eelneva päringu tulemus
// leian küsitud pildi indeksi järjendis
$current_picture = array_search($id,$image_list);
// vaikimisi eeldan, et kumbagi linki pole
$prev_link = $next_link = '';
// kui vaadeldav pilt ei ole esimene, siis teeme lingi eelmisele
if ($current_picture > 0)
$prev_link = 'http://site/pilt.php?id=' . $image_list[$current_picture-1];
// kui vaadeldav pilt ei ole viimane, siis link järgmisele
if ($current_picture < sizeof($image_list)-1)
$next_link = 'http://site/pilt.php?id=' . $image_list[$current_picture+1];
Ja ongi kogu moos. Lihtne ja loogiline :)





Comments
ja kui albumis on 50000 pilti siis saad ka iga kord fetcida seda id’d sealt ;)
id kui selline mille urlilt saad võib olla juba sorteeritud query offset, seega on sul vaja teada tegelikult vaid seda mitu pilti sul albumis on. Kui see number updateda veel omakorda albumi tabelisse, siis pole isegi count()’i vaja, aga oletame et ei update. :)
1. $count = “select count(id) from pildid_albumis where albumi_id=4;”
2. number_ranged id (sec!) 1 ja $coundi vahele.
3. joonistad pildi() “select * from pildid_albumis where albumi_id=4 order by id asc offset 33 limit 1;”
4. joonistad eelmise lingi vastavalt sellele kas pildi nummer on 1 või mitte.
5. joonistad järgmise lingi vastavalt sellele kas id == count või mitte
voila
Eelmisele jätkuks siis andmebaasi teemat natuke.
Nimelt andmebaasis kus kirjete lisamisi on 100 korda vähem kui sealt küsimisi tuleb andmeid hoida “küsijale” meelepärases vormis. See kas lisamisel tehakse 1, 2 või 5 päringut ei oma seal tähtsust.
Ilmselt on sul see küsimus seoses masendav.com’is oleva teemaga, seega soovitan soojalt kasutada piltide tabelis ka order_nr veergu, mis annab kasutajale eelise pilte edasi-tagasi liigutada ning ka browsimise teeb turvaliseks ning lihtsaks, kuna urlil on vaid pildi ja albumi järjekorranumber.
Vana müskel ja ka postgres ei oska limiteid ja offsette korralikult, s.t. seesmiselt joonistatakse ikkagi kogu tulemuse grid välja, ning alles siis antakse pärijale osa neist. Seega “offset 33 limit 1″ on sama kallis(ressursi mõttes) kui “select id”.
Jah, nii ta paraku on - ega see minu pakutud lahendus väga kaugele ei skaleeru küll.
Write a Comment