PHP + MYSQL: Tömbös update, ami esetleg insert, vagy delete

PHP + MYSQL: Tömbös update, ami esetleg insert, vagy delete
2014-08-10T23:46:05+02:00
2014-08-11T09:10:40+02:00
2022-12-01T11:20:43+01:00
Koppanyvezer
Sziasztok!
A problémám egy kicsit összetett (legalábbis számomra), ezért megpróbálom alaposan leírni.
Adott egy weboldal, ami egy filmes adatbázis/filmes ajánlókat tartalmaz. Az ajánlók beküldésénél néhány mezőnél lehetőség van egyszerre több érték beküldésére is: műfaj, rendező, író, szereplők (ezekhez tartozik egy-egy 'szerep' mező). Ezt így kell elképzelni. Markupban pedig így, hogy ezeket az értékeket tömbben tárolom (és ezeket később ', ' mentén implode-olva küldöm be az adatbázisba):

<select name="directors[]" class="select_directors"> <option value="...">...</option> ...
A beillesztés két táblába történik: 'movies' és 'staffrole'. A 'movies' a film adatait tartalmazza, a 'staffrole' pedig így néz ki. Itt a 'movie_id' oszlop egyértelműen a 'movies' tábla elsődleges kulcsát jelenti, a 'staff_id' pedig a személyek adatait tartalmazó tábla elsődleges kulcsát. A 'priority' egy sorrendet jelent, ami a rendezők és írók esetében 0 értéket kap, viszont a színészeknél ez 1-től indulva növekszik, az első képen látott listából történő kiválasztás sorrendje szerint... ez a későbbi kilistázásnál fontos. A 'role' oszlop pedig a szerepeket foglalja magában, ami rendező/író esetében 'D' illetve 'W' értékeket kap, a színészeknél pedig az adott filmben alakított karakter nevét. Ez a kódomban így néz ki (CodeIgniter keretrendszer).

Eddig még nincs semmi probléma, az insert hibátlanul megtörténik, viszont szeretném, hogy legyen lehetőség ezen ajánlók utólagos szerkesztésére is.
Ezt a legegyszerűbben úgy tudtam kitalálni, hogy 'movies' táblában egy sima update-et hajtok végre, a 'staffrole' táblából pedig először törlök mindent, majd újra beillesztem a módosított értékeket (még, ha azok éppenséggel nincsenek is módosítva az űrlapon)... egyszerű, ámde drasztikus megoldás és biztos vagyok benne, hogy van ennél egy sokkal jobb eljárás is, viszont erre még nem sikerült rájönnöm.

A következőre gondoltam: Adott ugyebár a módosító form. Ha a formban ugyan annyi rendező/író/színész van megadva, mint az adatbázisban, akkor történjen egy update. Ha a formban kevesebb rendező/író/színész van megadva, mint az adatbázisban, akkor a meglevőket update-elje, a "maradékot" pedig törölje ki az adatbázisból (tehát a két adathalmaz különbségét... ehhez kell valahol egy számláló). Ha pedig a formban több rendező/író/színész van megadva, akkor az adatbázisban már meglevő adatokat update-elje, a többivel pedig insert történjen. Legalábbis nekem ez így tűnne logikusnak, viszont sajnos nem tudom kivitelezni.
Remélem jól érthetően leírtam mindent és tudtok segíteni. Ha szükségetek van még bármilyen adatra/kódrészletre/magyarázatra, szóljatok.
Előre is köszönöm a segítséget!
Mutasd a teljes hozzászólást!
Miért akarnád megnehezíteni a dolgod, amikor a legtisztább megoldás a drasztikus megoldás lenne?
Szerinted ettől a szerver eldobja majd agyát, hogy 'jaj nem bírom ezt a sok törlést/beszúrást'? Gondolom nem fogják másodpercenként módosítgatni.

A másik megoldásnál pedig csak fölöslegesen bonyolítanád a dolgot mindeféle feltétellel meg felesleges lekérdezésekkel stb. Nem beszélve arról, hogy a későbbiekben esetleg változtatsz valamit a programod logikáján.

Annyit megtehetsz, hogy ha csak a film adatain változtatnak, akkor a drasztikus részt kihagyod.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd