Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL: Seuraava ja edellinen rivi

Haraldinho [09.09.2014 18:29:49]

#

Hei! Olen tehnyt jonkinlaista blogisysteemiä harjoittelumielessä PHP:lla koodaamaani sisällönhallintajärjestelmään. Blogi toimii karkeasti siten, että jokainen blogikirjoitus tallennetaan MySQL-tietokantaan ja samalla kirjataan kirjoituksen otsikko ja id(AUTO_INCREMENT) omiin sarakkeihinsa.

Blogipostauksen url on tyyliin osoite.fi/blogi.php?post=15 (jossa 15 on postauksen id). Ohjelma siis hakee tietokannasta $_GET-muuttujan avulla oikean postauksen ja tulostaa sen näytölle.

Ongelma:
Systeemi toimii hienosti, mutta kun yritän nyt tehdä toimintoa, jolla pystyy selaamaan postauksia tyyliin "< Edellinen" ja "Seuraava >", en onnistu saamaan aikaan järkevää koodia selvittämään mikä on tietokantataulukon edellinen/seuraava rivi. Ongelma on lähinnä se, että kun postauksia voidaan poistaa, joten kaikki id:t eivät ole käytössä, eli EI onnistu näin:

<?php
...

$prev_id = $_GET["post"]-1;

echo '<a href="blog.php?post=$prev_id">< Edellinen</a>';

...
?>

, koska osa riveistä saattaa olla tyhjiä (ei ole olemassa), koska ne on voitu poistaa.

En siis tietenkään tarvitse valmista koodia, mutta jonkinlaista funktiota tai muunlaista vinkkiä kaipailen. Toivottavasti löysitte langan pään pitkästä selityksestä huolimatta :)

Metabolix [09.09.2014 18:45:46]

#

Tieto pitää hakea tietokannasta.

SELECT id FROM taulu WHERE id < ? ORDER BY id DESC LIMIT 1;
-- ? = nykyinen id

p99o [09.09.2014 19:33:41]

#

Ja jos mysql palauttaa tyhjän (olet ensimmäisessä postauksessa ja yrität mennä edelliseen) kannattaa tehdä jokin viritelmä.

Haraldinho [09.09.2014 21:01:32]

#

Pitääpäs kokeilla tuota Metabolixin kikkaa.

p99o kirjoitti:

Ja jos mysql palauttaa tyhjän (olet ensimmäisessä postauksessa ja yrität mennä edelliseen) kannattaa tehdä jokin viritelmä.

Juu tuon huomasinkin mutten viitsinyt laittaa esimerkkikoodiin selkeyden vuoksi.

Lisäys: Noniin, nyt toimii, kiitos Metabolixille hienosta SQL-kyselystä!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta