Több szintű törlés MySqlben
Elvesztem a mysql terén kicsit.
Van három táblám, sorba kapcsolva, kettes táblának van egy oszlopa ahol a mezők az egyes tábla vonatkozó id-jét tartalmazza. A 3. tábla pedig a kettesre mutat e módon.
Példának: Galériák(id), fotók(id,galeriaId), kommentek(id,fotoId).
Nem tudom milyen módszer lenne itt a jó ha törölni kell egy galériát, és ezzel együtt a képeket, és a kommenteket is.
A helyzetet bonyolítja, hogy a képeket nem csak az adatbázisból, hanem fájlként is törölni kell.
Eddig így csináltam:
1.Lekérdeztem a képek táblából az összes megfelelő galeriaId-jű képet.
2.A result-on végigszaladva töröltem a képfájlokat, és az idket összefűztem ,-vel elválasztva, egy $ids változóba.
3.Töröltem a kommenteket a kommentek táblából a következő segítségével: "WHERE in IN ($ids)"
4.Töröltem a képek táblából a galeriaId alapján.
5. Töröltem a galériát.
Lehet ezt hatékonyabban? Az első query-t nem lehet megkerülni, de a 3 törlésest gondolom össze lehetne vonni, bár gőzöm sincs hogyan. Érdemes, hoz kézzel fogható sebesség növekedést?
■ Van három táblám, sorba kapcsolva, kettes táblának van egy oszlopa ahol a mezők az egyes tábla vonatkozó id-jét tartalmazza. A 3. tábla pedig a kettesre mutat e módon.
Példának: Galériák(id), fotók(id,galeriaId), kommentek(id,fotoId).
Nem tudom milyen módszer lenne itt a jó ha törölni kell egy galériát, és ezzel együtt a képeket, és a kommenteket is.
A helyzetet bonyolítja, hogy a képeket nem csak az adatbázisból, hanem fájlként is törölni kell.
Eddig így csináltam:
1.Lekérdeztem a képek táblából az összes megfelelő galeriaId-jű képet.
2.A result-on végigszaladva töröltem a képfájlokat, és az idket összefűztem ,-vel elválasztva, egy $ids változóba.
3.Töröltem a kommenteket a kommentek táblából a következő segítségével: "WHERE in IN ($ids)"
4.Töröltem a képek táblából a galeriaId alapján.
5. Töröltem a galériát.
Lehet ezt hatékonyabban? Az első query-t nem lehet megkerülni, de a 3 törlésest gondolom össze lehetne vonni, bár gőzöm sincs hogyan. Érdemes, hoz kézzel fogható sebesség növekedést?
Nézz utána a foreign key-nek.
CASCADE példa
Gondolom valami ilyesmire gondoltal, nem ellenőriztem le hogy jó e, de ha a táblát ugy hozod létre hogy törlés esetén a hivatkozo külső kulcsokat is törli (szóval ha törölsz a t1 böl, akkor t2 böl törlödik az összes sor ami rá hivatkozott)
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
pl
CREATE TABLE t1(
id int NOT NULL AUTO_INCREMENT,
t1name varchar(20) NOT NULL,
PRIMARY KEY(id)
)
CREATE TABLE t2 (
id int NOT NULL AUTO_INCREMENT,
t1id int NOT NULL,
comment1 varchar(20) NOT NULL,
comment2 varchar(20) NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY (t1id) REFERENCES t1(id) ON DELETE CASCADE
)
És ha jól tudom, ilyesmit
Ez a cascade jónak tűnik.
Azt, hogy érted, hogy nem lehet keresni a szövegben? A fulltext index már nem mondott semmit. :)
Ha a cikkek teljes szövegében
Na tanultam valami újat
Szerencsére a galéria rendszernél nincs kereshető adat, szóval ott nem számít.
A like az teljesen jó
Joinnal is lehet!