webForumDet fria alternativet

Problem med delete

9 svar · 511 visningar · startad av Pedda

PeddaMedlem sedan juni 20006 032 inlägg
#1

Jag har ett problem med att få min delete att fungera.

Jag har tre tabeller:

forums
id
...

threads
thread_id
ref_forumId // referens till vilket forum tråden tillhör
...

posts
post_id
ref_threadId // referens till vilken tråd posten tillhör
...

Det jag försöker få till är att när jag raderar ett forum så ska även tillhörande threads och posts raderas.
Databasen är MySQL 5.0.

@ndersMedlem sedan juni 200032 969 inlägg
#2

Sätt upp foreign keys med "on delete cascade".

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

Mvh

PeddaMedlem sedan juni 20006 032 inlägg
#3

Nu har jag lagt till foreign keys med on delete cascade.

Innebär inte det att trådar och poster automatiskt ska raderas om jag kör:
$query = "DELETE FROM ".$prefix."forums WHERE id = $forumId";

Testade och forumet raderades men inte tillhörande trådar.

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Hur är tabellerna definierade? Visa vad SHOW CREATE TABLE tabellnamn ger för alla inblandade tabeller.

PeddaMedlem sedan juni 20006 032 inlägg
#5

Missade att sätta INNODB så foreign key ignorerades.

Nu gör jag något annat fel. Får felmeddelandet:
Can't create table '.\testforum\forums.frm' (errno: 150)

Felmeddelandet visar att något är fel med min foreign key, men vad?
tabellen forums skapas som den ska men sen när tabellen threads ska skapas så tar det stopp.

mysql_query("CREATE TABLE threads (
  thread_id int(11) UNSIGNED NOT NULL auto_increment,
  ref_forumId int(11) NOT NULL,
  ...
  PRIMARY KEY (thread_id),
  INDEX (ref_forumId), 
  FOREIGN KEY (ref_forumId) REFERENCES forums(id) ON DELETE CASCADE  
) ENGINE=INNODB;") or die (mysql_error());
Peter SMedlem sedan dec. 20025 483 inlägg
#6

Har du satt INNODB på samtliga tabeller?

PeddaMedlem sedan juni 20006 032 inlägg
#7

Peter S skrev:

Har du satt INNODB på samtliga tabeller?

Ja

Peter SMedlem sedan dec. 20025 483 inlägg
#8

En liten sökning gav bl.a. följande:
http://forums.mysql.com/read.php?22,19755,43805#msg-43805

PeddaMedlem sedan juni 20006 032 inlägg
#9

Tack.
Hjälpte att sätta UNSIGNED på fälten.

Nu ska jag testa att lägga in lite och radera bara så får vi se.

PeddaMedlem sedan juni 20006 032 inlägg
#10

Verkar funka som det ska. :)

127 ms totalt · 3 externa anrop · v20260731065814-full.b943c234
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)