Eli miten kannattaisi toteuttaa sillanen että jos sivulle tulee vaikka 100 eri linkkiä ja haluat jakaa ne aiheisiin niin miten sen saa php:lla että ne tulostuu siten että aihe alueen alle aina sen linkit ja sit tulostuu uusi aihe alue ja sen linkit siihen?
Jotenki seuraavasti, olettaen että jostain on saatu vastaavanlainen kategorian mukaan järjestetty linkkitaulukko:
<?php $categories = array("zup" => "Category_1", "zap" => "Category_2", "zep" => "Category_3"); $links = array( array("url" => "http://www.google.com/", "cat" => "zup"), array("url" => "http://www.altavista.com/", "cat" => "zup"), array("url" => "http://www.zorro.fi/", "cat" => "zep"), array("url" => "http://paavi.com/", "cat" => "zap")); $tempCat = null; print "<dl>"; foreach ($links as $link) { if ($tempCat != $link['cat']) print "<dt>" . $categories[$link['cat']] . "</dt>"; print "<dd><a href='" . $link['url'] . "'>" . $link['url'] . "</a></dd>"; $tempCat = $link['cat']; } print "</dl>"; ?>
Ei varmaan toimi suoraan, mutta idean saanee selville.
vielä pitäis mysql tehä tollanen
Vähän oma-aloitteisuutta kehiin jo.
<?php $query = "SELECT li.url, cat.category " . "FROM link li " . "LEFT JOIN category cat " . "ON li.category_id = cat.id " . "ORDER BY cat.category ASC"; $result = mysql_query($query, $dbConn); $links = array(); while ($row = mysql_fetch_assoc($result)) $links = array("url" => $row['url'], "category" => $row['category']); $tempCat = null; print "<dl>"; foreach ($links as $link) { if ($tempCat != $link['category']) print "<dt>" . $link['category'] . "</dt>"; print "<dd><a href='" . $link['url'] . "'>" . $link['url'] . "</a></dd>"; $tempCat = $link['category']; } print "</dl>"; ?>
Edelleen, ei varmaankaan toimi suoraan, mutta idean saanee selville.
no kiitos mut ei olisi tarvinnut tehdä koodia
Eipä onnistunut multa koodin tekeminen, käytän kahta taulukkoa, toisesta tulee linkkien tiedot ja kategorian id ja toisessa on kategoriat ja niiden numerot
No niinhän tuossa Olgan esimerkissäkin haetaan samanlailla kahdesta taulusta. Tuossa MySQL-versiossa ei tarvita kahta silmukkaa, mutta jääköön kotitehtäväksi sen ensimmäisen poistaminen...
Millasia tauluja muka on tuossa käytetty kun en osaa käyttää LEFT JOINia, ymmärtääkseni taulujen nimet ovat category ja cat
Tuossa Olgan esimerkissä taulujen nimet ovat link
ja category
, joille muodostetaan aliakset li
ja cat
(FROM link li LEFT JOIN category cat
). Tuon voi kirjoittaa selkeyden vuoksi myös FROM link AS li LEFT JOIN category AS cat
miten mä saan ne sillee et jos on sama kategoria niin tulostuu linkki siihen ja jos taas eri niin tulostuu linkki
Täh? :)
siis et ne ulostuu kategorioittain
No tuossahan on esimerkki siihen, ei tota ton selkeemmin voi selittää. Jos perusteet on hukassa, niin kannattaa lukea noita oppaita ja tehdä yksinkertaisempia harjotuksia ensin.
<?php include('files/yhteys.php'); $query = "SELECT li.url, li.nimi, li.info, cat.name " . "FROM linkit li " . "LEFT JOIN linkit_category cat " . "ON li.category_id = cat.id " . "ORDER BY cat.name ASC"; $result = mysql_query($query, $yhteys); $link = array(); while ($row = mysql_fetch_assoc($result)) { $link = array("url" => $row['url'], "url_nimi" => $row['nimi'], "url_info" => $row['info'], "category" => $row['name']); $tempCat = null; print "<dl>"; if ($tempCat != $link['category']) print "<dt>" . $link['category'] . "</dt>"; print "<dd><a href='" . $link['url'] . "' title='" . $link['url_info'] . "'>" . $link['url_nimi'] . "</a></dd>"; $tempCat = $link['category']; print "</dl>";} ?>
En tiedä mikä tost puuttuu/on väärin
Tuo $link-taulukko on turha, samalla tavoin voit lukea arvot suoraan $row-taulukosta, joka saa arvonsa while-silmukan jokaisen kierroksen alkaessa. Tuo $tempCat-muuttujan alustus pitäisi siirtää silmukan ulkopuolelle, sillä nythän $tempCat on taatusti joka kerralla eri kuin kategoria, sillä se on aina null. Samoin listan avaustagin tulostus pitää siirtää silmukan ulkopuolelle, sillä eihän sitä pidä jokaiselle linkille tehdä erikseen. If-lauseen muotoilu on vähän kummallinen. Joko laitat kaarisulkeet sen vaikutusalueen ympärille, tai laita edes tuo print-lause sen jälkeiselle riville ja sisennä hieman. Ja myöskään lopettavaa dl-tagia ei tarvi tulostaa jokaisella kierroksella, vaan ainoastaan linkkilistan lopuksi. Varmaan on vielä muutakin hämminkiä, mutta nuo nyt pisti aluksi silmään.
Edit: Ja tosiaan tuossa edellisessä esimerkissä se yksi silmukka on turha, mutta halusin vain havainnollistaa, miten saat tietokannan avulla (suunnilleen) ensimmäistä esimerkkiä vastaavan tilanteen aikaan. Eli tilanteen, jossa sinulla on taulukossa nuo kaikki linkit ja kategoriat.
Nyt sain toimimaan, ISO KIITOS TEILLE JOTKA AUTOITTE MUA
Aihe on jo aika vanha, joten et voi enää vastata siihen.