ugrás a tartalomhoz

Több-több kapcsolat megvalósítása, és lekérdezése

drking · 2015. Május. 7. (Cs), 12.03
Sziasztok!

Amit szeretnék megvalósítani, egy könyvtári nyilvántartás webes felülettel, ami nyilvántartja a szerzőket (vezetéknév, keresztnév, nemzetiség, születési év, rövid életrajz), illetve a
könyvek adatait (cím, szerző(k), kiadó, kiadás éve, terjedelem, témakód, rövid leírás, nyelv). Ugye egy író több könyvet is írhatott, és egy könyvnek egy vagy több szerzője is lehet.
Én ezt úgy gondoltam, hogy csinálok 3 táblát (konyv, konyv_szerzo, szerzo):
konyv(id, cim, kiado, kiadas, terj, tema, leiras)
szerzo(id, veznek, kenev, nemz, szuletes, eletrajz)

a kapcsoló tábla pedig:
konyv_szerzo(id, konyvid, szerzoid)

Szerintetek ez így megfelelő? Van egyszerűbb megoldás?

Második kérdésem pedig az lenne, hogy ha ki szeretném listázni az összes könyvet táblázatos formában. [szerző(k). cím, kiadás alapján, minden könyv új sorba], hogy tehetem meg? Natural joinnal, tudnátok egy konkrét select parancsot mondani?
A php-s kiíratás megy, csak nem tudom milyen mysql paranccsal lehetne ezt elérni.

Előre is köszönöm!
 
1

Még egy kérdésem lenne, ha

drking · 2015. Május. 7. (Cs), 12.11
Még egy kérdésem lenne, ha kiírok szépen minden könyvet a táblázatban, hogyan tudnám őket módosítani/ törölni a webes felületen, (el szeretnék helyezni egy kattintható linket/gombot a könyv sorában)?
Mert ha pl kevés adat lenne és nem while ciklussal íratnám ki. akkor létrehozhatnék mindegyikhez egy függvényt, de így nem tudom.

Így iratom ki a szerző nélkül:
html táblázat deklaráció, mysql kapcsolat felépítése phpban...

$result = mysqli_query($conn, "SELECT cim, kiado, kiadas FROM konyv");

while( $row = mysqli_fetch_array($result)){			
printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$row["cim"],$row["kiado"],$row["kiadas"] );	
		}
Köszönöm!
2

Sokmindentől függ, hogyan

Hidvégi Gábor · 2015. Május. 7. (Cs), 12.54
Sokmindentől függ, hogyan érdemes megvalósítani. Ha kicsi lesz az adatbázis, akkor egy lekérdezéssel megkaphatod a szerzők listáját, a kulcsszó a GROUP_CONCAT (MySQL specifikus). Ha a szerzők nevére kell tudni kattintani, akkor viszont minden könyv mellé plusz lekérdezés szükséges a szerzők adataihoz.

Ha az idők folyamán meghízik az adatbázis, akkor érdemes lesz a szerzők adatait a könyvek táblájába is bemásolni, így nem lesz szükség a JOIN-ra.
3

Köszönöm gyors válaszod! Az

drking · 2015. Május. 7. (Cs), 13.39
Köszönöm gyors válaszod!

Az az igazság, hogy most tanulgatom az adatbázis kezelést, ez pedig egy szorgalmi szerű dolog.
Az adatbázis nem fog nagyra hízni, max 20-30 könyv rekord lesz benne.
Úgyhogy mindenképp a kapcsoló-táblás dologgal kéne megvalósítani.

A php-s soronkénti törlést már megoldottam, egy táblára (a könyv-re).

Azt még mindig nem tudom, hogyan tudnám kilistázni a táblázatomban a könyvekhez kapcsolódó szerzőket is a kapcsoló táblámon "keresztül".
Halmazelméleti szinten mennek ezek a join-ok, de most nem tudom mit/hogyan kéne használnom.
Két táblára még megy. pl.:
select * from konyv join konyv_szerzo on konyv.id=konyv_szerzo.szerzoid
4

Azt még mindig nem tudom,

Hidvégi Gábor · 2015. Május. 7. (Cs), 15.06
Azt még mindig nem tudom, hogyan tudnám kilistázni a táblázatomban a könyvekhez kapcsolódó szerzőket is a kapcsoló táblámon "keresztül".
Erre írtam a GROUP_CONCAT-ot.

A JOIN-okra pedig keress rá a neten, van fenn ezer anyag a témában.
5

select konyv.*, szerzo.* from

Poetro · 2015. Május. 7. (Cs), 15.07
select konyv.*, szerzo.* from konyv 
join konyv_szerzo on konyv.id = konyv_szerzo.szerzoid 
join szerzo on konyv_szerzo.szerzoid = szerzo.id
Nem próbáltam ki.

Minden könyv annyiszor fog szerepelni a listádban, ahány szerzője van. Érdemes lehet ezért a tartalmat csoportosítani szerver oldali kóddal, megjelenítés előtt, vagy például MySQL esetén GROUP_CONCAT-tal.