Samassa taulukossa kahden henkilön yhdistäminen jos id on "ehtokentässä" sama
Henkilon_nimi, Henkilon_yhdiste_id
1 Jussi 2
2 Matti 0
3 Veli 0
4 Marja 2
5 Juuso 3
Tarkoitus olisi siis luoda kysely, joka hakee seuraavanesimerkin mukaisesta taulukosta seuraavan tulostuksen
Jussi , Matti
Matti , -
Veli , -
Marja , Matti
Juuso , Veli
Älä tee noin! Tee uusi taulu, jossa tuo yhdistäminen tehdään. Samalla voit yhdistää useita henkilöitä toisiinsa.
Kyllä noin voi tehdä, jos oikeasti on tarkoitus, että jokaisella henkilöllä voi olla tasan yksi oma yhteys. Tuloksena on siis verkko, jossa jokaisesta solmusta lähtee yksi nuoli.
Kysymyksesi on aika epämääräinen. Jos joka tapauksessa haet taulusta kaikki henkilöt, helpointa on vain laittaa hakutulos taulukkoon id:n mukaan ja tehdä tulostus tähän malliin:
foreach ($henkilot as $id => $henkilo) { $kohde = $henkilot[$henkilo["yhdiste_id"]]; echo $henkilo["nimi"], " => ", $kohde["nimi"], "\n"; }
Jos haluat hakea vain osan henkilöistä tai muuten vain haluat pitää kaiken SQL-kyselyssä, voit tehdä LEFT JOIN -kyselyn. Tilanne on aivan sama kuin kahdella erillisellä taululla, mutta nyt vain käytetään samaa taulua kahteen kertaan.
SELECT h1.nimi AS h1_nimi, h2.nimi AS h2_nimi FROM henkilo AS h1 LEFT JOIN henkilo AS h2 ON h2.id = h1.yhdiste_id
Muista säätää kantaan myös oikea FOREIGN KEY -viittaus, jotta kaikki id:t varmasti ovat olemassa, ja älä käytä olemattomana arvona lukua 0 vaan arvoa NULL.
Kiitos Metabolix!
Periaatteessa pidän ajatuksesta, tehdä sen SQL -kyselyssä, mutta toisaalta tarvitsen mukaan kaikki henkilöt. Ylempi vaihtoehdoista on siis kuin luotu minulle! Kiitos tästä jälleen kerran.
ps. Kysymykseni oli huonosti "esitetty", kun en osannut oikein kertoa mitä haen. Mutta hain juuri tätä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.