MeleaMedlem sedan juli 20033 147 inlägg Tjenixen!
Har fastnat... jag har tre tabeller som jobbar mellan varandra typ, såhär:
tbl_project - id
tbl_business - projectid (relation till tbl_project id)
tbl_comment - businessid (relation till tbl_business id)
Hur kan jag skriva en fråga som tar bort från alla dessa tabeller med ett id (tbl_project id)?
Tack på förhand!
Peter SMedlem sedan dec. 20025 483 inlägg DBMS?
I nyare versioner av MySQL kan du testa:
delete p
, b
, c
from tbl_project p
, tbl_business b
, tbl_comment c
where p.id = <id>
and p.id
= b.projectid
and c.businessid
= b.projectid
MeleaMedlem sedan juli 20033 147 inlägg Har MySQL 4.1.10, men det ville sig inte riktigt.
DELETE p, b, c
FROM p_project p, p_business b, p_comment c
WHERE p.id = $_GET[projectid]
AND p.id = b.projectid
AND c.businessid = b.projectid
/r
Hm, relationen var p.id till b.projectid och b.id till c.businessid
Peter SMedlem sedan dec. 20025 483 inlägg Vad händer om du skippar alias?
delete tbl_project p
, tbl_business b
, tbl_comment c
from tbl_project
, tbl_business
, tbl_comment
where p.id = <id>
and p.id
= b.projectid
and c.businessid
= b.id
MeleaMedlem sedan juli 20033 147 inlägg Då får jag upp
Table 'project.tbl_project' doesn't exist
/r
Hold your horses, det står fel, vänta lite. ;)
/r #2
Det funkar! :)
Hur kommer det sig att prefixerna inte går att använda här?
/r #3
Detta funkar
delete tbl_project p
, tbl_business b
, tbl_comment c
from tbl_project p
, tbl_business b
, tbl_comment c
where p.id = <id>
and p.id
= b.projectid
and c.businessid
= b.id
LarsGMedlem sedan dec. 200012 464 inlägg Definiera foreign keys med on delete cascade.
MeleaMedlem sedan juli 20033 147 inlägg
LarsG skrev:
Definiera foreign keys med on delete cascade.
Heroglyfer för mig, vad menar du? ;)
LarsGMedlem sedan dec. 200012 464 inlägg Om du definierar en foreign key med on delete cascade från t1 till t2 så innebär det att om du gör delete på poster i t2 så kommer poster som refererar dessa i t1 också att tas bort.
MeleaMedlem sedan juli 20033 147 inlägg Detta är en inställning man kan göra i MySQL? Eller har jag helt missförstått dig? :)
Hur löser jag detta bäst isåfall?
LarsGMedlem sedan dec. 200012 464 inlägg Jo, titta under create eller alter table i manualen.
MeleaMedlem sedan juli 20033 147 inlägg Tackar!
Om jag ska köra med den koden Peter gav mig tills vidare, så funkar det inte riktigt.
Om det inte finns några poster i tbl_business eller tbl_comment så tas inte projektet bort.
Peter SMedlem sedan dec. 20025 483 inlägg Det är bättre att göra rätt från början. :) Med Lars förslag kan det då se ut enligt:
create table tbl_business(
id int,
projectid int,
primary key (id),
foreign key (projectid)
references tbl_project (id)
on delete cascade
)
MeleaMedlem sedan juli 20033 147 inlägg Har suttit och testat som en tok nu, men får inte till det. :x
Att skapa tabellen med foreign key funkar utmärkt, precis enligt din princip Peter.
Men om jag tar bort en post från tbl_project, där jag har en eller flera poster i tbl_business tas inte dessa bort.
Har läst manualen här hur man ska gå tillväga men det vill sig inte.
När jag ska skapa tbl_business lägger jag till
FOREIGN KEY (`projectid`) REFERENCES tbl_project (`id`) ON DELETE CASCADE
Efter PRIMARY KEY.
Detta genererar inga felmeddelanden.
/r Ah, läste nu att det måste vara InnoDB.
Finns det någon liknande syntax för MyISAM eller måste jag konvertera om till InnoDB?
LarsGMedlem sedan dec. 200012 464 inlägg Foreign keys fungerar inte i MYISAM.
MeleaMedlem sedan juli 20033 147 inlägg Då blir det till att konvertera då! :)
Tack för hjälpen båda två!
MeleaMedlem sedan juli 20033 147 inlägg Gah, nu blir jag alldeles tokig på det här. :x
När jag nu ska skapa en tabell (efter att ha pillat i inställningarna i phpMyAdmin för att godkänna relationer mellan tabeller) så står det att den inte kan skapa tbl_project.frm.
Vad är frm för fil och varför går det inte att skapa den? :l
MeleaMedlem sedan juli 20033 147 inlägg Ah, nu fick jag igång det!
Hade rört ihop det med att FOREIGN KEY skulle vara på tbl_project, och uppåt. :)
springer och gömmer mig i skamvrån