webForumDet fria alternativet

Ta bort poster från flera tabeller med ett ID

Databaser & SQL

6 svar · 362 visningar · startad av Steady

Medlem sedan dec. 2004225 inlägg
Frågan#1

Hejsan!

Jag undrar om det går att ta bort poster från flera tabeller där ID:et är detsamma. Strukturen ser ut såhär:

[b]anteckning[/b]
 - ID [i]int[/i]
 - KategoriID [i]int[/i]
 - Anteckning [i]varchar[/i]
 - AventyrID [i]int[/i]

[b]aventyr[/b]
 - ID [i]int[/i]
 - Aventyr [i]varchar[/i]

[b]kategori[/b]
 - ID [i]int[/i]
 - Kategori [i]varchar[/i]
 - AventyrID [i]int[/i]

Det jag vill är alltså att ta bort en kategori, och samtidigt ta bort den posten som har samma KategoriID i tabellen anteckning.
Går detta eller måste man göra flera SQL-satser?
Tack på förhand

Medlem sedan dec. 19996 522 inlägg
#2

Vilket DBMS ? Du kan ju när du skapar dina relationer skapa dem med on cascade delete, så plockas alla relaterade tupler bort vid radering av en specifik tupel

Medlem sedan dec. 2004225 inlägg
#3

Hehe, det där är heroglyfer för mig, jag använder MySQL. :)

Medlem sedan dec. 19996 522 inlägg
#4

:) Översättning på herogrlyferna finner du på
http://www.informit.com/articles/article.asp?p=30875&seqNum=8

Det innebär att om du har on delete cascade på relationen mellan KategoriID i anteckning och KategoriID i kategori så kommer alla med ett det kategoriId i anteckning tas bort när det id:t tas bort ur kategori (där den är primary key)

Medlem sedan dec. 2004225 inlägg
#5

Alldeles lysande, tack så mycket erka! :)

Medlem sedan dec. 2004225 inlägg
#6

Hum, stötte på ett problem.
Om det inte finns några poster i tabellen anteckningar så tar inte kategorin bort. Just nu ser det ut såhär:

mysql_query("DELETE kategori, anteckningar FROM kategori, anteckningar 
WHERE kategori.ID = $_GET[katID] AND kategori.ID = anteckningar.KategoriID") or die (mysql_error());

Jag prövade att byta ut AND mot OR men det vill sig inte heller.

/red Jag upptäckte att det fanns en annan variant med LEFT JOIN som funkade så jag ville ha det. Tack än en gång!

Medlem sedan dec. 19996 522 inlägg
#7

Du behöver inte ha joinen i deleten, det räcker med Delete from kategori WHERE kategori.ID = $_GET[katID]

291 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
163 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
160 ms — ändringar (db)