8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)
  • Q:
    Bijdrager
    wout3r

    [PHP & MySQL] Goede manier om volgende id op te halen?

    Hallo mede-maccers,
    Ik ben in PHP een fotoboek aan het maken. Maar nu wil ook onder een navigatie met vorige en volgende. En dat hij dan naar de volgende foto gaat.

    Nou dat is lastiger dan ik dacht. Want als de beheerder van het fotoboek nou een foto verwijderd dan sluiten de id’s niet meer op elkaar aan.

    Heeft iemand enig idee hoe ik dit zou kunnen aanpakken?

    Bijdrager
    oegemeister

    haal alle foto’s uit de database. Prop dat in een numerieke array. De keys in de array zijn dan wel een gewone volgorde.

    niet zo lastig duz…..

    [code:1:9940b094b5]
    <?php
    // Get all files out of the database
    $query = mysql_query("SELECT `photo` FROM `photo_table`");
    while ($row = mysql_fetch_assoc($query)) {
    $photos[] = $row[’photo’];
    }
    //now you have an array with all the photos
    [/code:1:9940b094b5]
    photos[0] is de eerste foto, $photos[1] de 2e, etc.

    succes.
    Gr Sjoed

    Bijdrager
    iJoost

    Het volgende id is altijd het kleinste van alle id’s die groter zijn dan het huidige id.

    Dus zoiets als

    [code:1:9efe00581e]SELECT * FROM table
    WHERE id>huidige
    ORDER BY id ASC[/code:1:9efe00581e]

    en dan de eerste nemen uit het resultaat.

    Bijdrager
    oegemeister

    dat is alleen wel donders slecht programmeren.

    Als je dan bijv. 150 foto’s hebt gaat ie 150 queries op de databasse uitvoeren. En dat wil je niet. Het kan met 1 query en je bent klaar!

    Nog een tip.
    Nooit een query in een loop.

    gr Sjoerd

    Bijdrager
    iJoost

    Ja lieverd, maar meestal kun je in de query ook wel aangeven dat je alleen de eerste row maar wilt hebben. Bij SQL Server bijvoorbeeld SELECT TOP 1 * FROM… en bij Oracle is het … WHERE ROWID=1, etc. (En uiteraard kun je dan de ORDER BY clause weer weglaten.) Alleen weet ik niet zo uit mijn hoofd wat de equivalente syntax voor MySQL is. Maar dat kan de vragensteller vast zelf wel even uitzoeken, dacht ik…

    Maar blijkbaar was dat dus net even te veel gevraagd. Nou ja, bij deze dan alsnog expliciet. ;-P

    En van een query in een lus is voor zover ik de vragensteller begrijp hier geen sprake.

    Bijdrager
    oegemeister

    Nou schat… je hebt helemaal gelijk dat je maar 1 rij op kunt halen. Maar het is 100000000x beter om in 1 query 150 records op te halen dan 150 queries van 1 record. Bewerkingen voer je niet uit op een query maar op de uitkomst van de query.

    In mijn geval dus de array waar alle waarden in staan. Het is gewoon geen goed programmeerwerk als je elke keer als je op volgende klikt weer een query moet uitvoeren.

    gr Sjoerd

    Bijdrager
    iJoost

    De topic starter vroeg naar 1 rij. En in de IT doe je er verstandig aan om eerst maar eens te doen wat er gevraagd wordt.;-)

    Trouwens in een round trip gebaseerd fotoboek (en zo gek is dat helemaal niet, niet alles moet altijd perse met AJAX) zou ik dat ook verwachten. Op elk van die pagina’s hoef je ook niet meer te weten dan die ene row (en die voor het vorige record natuurlijk).

    Maar misschien heeft topic starter wel een opzet waarin ie iets heeft aan meer rijen tegelijk. Dat zou inderdaad kunnen. Alleen dat weten we dus niet. Vandaar dat ik het maar even hield bij een poging om de gestelde vraag te beantwoorden. ;-P

    Overigens is de query die ik voorstelde er eentje die in een normaal van indexen voorziene database uitstekend performt. Helemaal geen probleem als je die vaak moet uitvoeren.

    Bijdrager
    DarkRaverNL

    Voor MySQL gebruik je dan dit:

    Voor de < link:
    [code:1:70cee4b573]SELECT max(id) FROM `gallery` WHERE id < $currentrecord [/code:1:70cee4b573]

    Voor de > link:
    [code:1:70cee4b573] SELECT min(id) FROM `gallery` WHERE id > $currentrecord [/code:1:70cee4b573]

    Als je had gegoogled kwam je hier uit: http://www.daniweb.com/forums/thread43077.html
    (zoek op: MySQL SELECT next ID for prev next links)

    :innocent:

8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.