Minua on vaivannut noin viikko seuraava asia, googlaus, eikä mikään muukaan auta.
Määränpää:
1. Hakea kirjautuneena olevan henkilön riviltä tieto, ketkä hänellä on kavereita (ID)
2. (Psst... IDeet tallennetaan aina kaverit-kohdassa muotoon {ID} (välilyönti), voidaan muuttaa pilkuun) Muunnetaan explode-funktiolla ID/ID:t array-muotoon
3. Haetaan tietokannasta tällä ID:llä henkilön etu- ja sukunimi
4. Näytetään henkilö(t)
Tässä pitäisi myös tapahtua niin, että KAIKKI nimet pitäisi tulostua, eli while puuttuu asiaan? Eli miten tämä pitäisi toteuttaa...
Kysykää ihmeessä jos epäselvyyksiä. Tässä siis n. Viikko pohdittu asiaa ja tämä paikka ainoa toivoni...
Tee uusi taulu ystävät, josta noudat jokaisen henkilön kaverit yhdellä kyselyllä. Pilkuin tai vastaavin merkein eroteltu data ei ole tietokannalle ominainen tapa tallentaa tietoa.
Toivottavasti seuraavasta koodista on apua. Koodi olettaa, että taulussa henkilot on kentät id, etunimi, sukunimi ja kaverit. Kenttä kaverit sisältää kaverien id:t pilkuilla erotettuina.
$omaid = 1; $kysely = $yhteys->prepare("SELECT kaverit FROM henkilot WHERE id = ?"); $kysely->execute(array($omaid)); $tulos = $kysely->fetch(); $kaverit = $tulos["kaverit"]; if ($kaverit == "") die("Ei kavereita!"); $sql = "SELECT etunimi, sukunimi FROM henkilot WHERE id IN ($kaverit)"; $kysely = $yhteys->prepare($sql); $kysely->execute(); echo "Kaverit: <ul>"; while ($rivi = $kysely->fetch()) { $etunimi = $rivi["etunimi"]; $sukunimi = $rivi["sukunimi"]; echo "<li> $etunimi $sukunimi"; } echo "</ul>";
Huomaathan kuitenkin, että kaverilistan tallentaminen yhteen kenttään ei ole yleensä ottaen hyvä tapa. Tässä neuvoja tietokannan suunnitteluun:
https://www.ohjelmointiputka.net/oppaat/opas.
Antti Laaksonen kirjoitti:
Huomaathan kuitenkin, että kaverilistan tallentaminen yhteen kenttään ei ole yleensä ottaen hyvä tapa.
Se on yleisesti ottaen typerää. Jos haluat käyttää relaatiotietokantaa, niin käytä sitä oikein. Muutoin älä käytä relaatiotietokantaa. Vaihtoehtojakin on vaikka miten. Yksi suosituimmista on tällä hetkellä MongoDB.
Aihe on jo aika vanha, joten et voi enää vastata siihen.