Autor Zpráva
Luksa
Profil *
V promenne tid mam ID tematu, ktery chci smazat. Jak tedy smazat data z tabulky temata a zaroven data z tabulky vzkaz, ktera obsahuje sloupec id_tematu?

Toto mi smaze jen tema z tabulky temata
$sql = "DELETE FROM temata WHERE tid ='$id'"; 

A ted bych potreboval neco ve smyslu:
And DELETE FROM vzkaz WHERE id_tematu ='$id'

Diky
Luksa
Profil *
A nebo to lze udelat lepsim navrhnutim tabulek?

Mam tabulku VZKAZ - VID,DATUM,VZKAZ,UZIVATEL,ID_TEMATU
a tabulku TEMATA - TID,TEMA
kde TEMATA.TID == VZKAZ.ID_TEMATU

A chtel bych dosahnout smazani vsech vzkazu, ktere jsou v tematu, ktere dam smazat.
Kajman_
Profil *
Mazat naráz možná takto
delete from t, v using temata t left join vzkaz v on t.tid=v.id_tematu where t.tid='$id'


U innodb tabulek je možno nastavit cizý klíče. A ty nastavit tak, že se při smazání primárního klíče, položky samy odstraní.
Luksa
Profil *
Kajman:
Nastavil jsem cizi klice, ale vzkazy se mi nesmazou.

CREATE TABLE temata (
    tid INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    tema VARCHAR(100) NOT NULL
)


CREATE TABLE vzkaz (
    vid INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    datum VARCHAR(40) NOT NULL,
    vzkaz VARCHAR(1000) NOT NULL,
    uzivatel VARCHAR(20) NOT NULL,
    id_tematu INTEGER NOT NULL,
    FOREIGN KEY (id_tematu) REFERENCES temata (tid)
)


$sql = "DELETE FROM temata WHERE tid ='$id'"; 


Tema se smaze z DB smaze, ale vzkazy v ni zustanou...
Luksa
Profil *
Zkusil jsem ON DELETE CASCADE, ale ani tak se vzkazy nesmazou

CREATE TABLE temata (
    tid INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    tema VARCHAR(100) NOT NULL
)

CREATE TABLE vzkaz (
    vid INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    datum VARCHAR(40) NOT NULL,
    vzkaz VARCHAR(1000) NOT NULL,
    uzivatel VARCHAR(20) NOT NULL,
    id_tematu INTEGER NOT NULL,
    FOREIGN KEY (id_tematu) REFERENCES temata (tid) ON DELETE CASCADE
)

$sql = "DELETE FROM temata WHERE tid ='$id'"; 


Prosim...
Luksa
Profil *
Prosim Vas, co je spatne?
Luksa
Profil *
Nikdo nevi? Snad sem to popsal spravne + ukazka...
Luksa
Profil *
Prosim Vas, stale na to nemuzu prijit. Nevi nekdo?
Joker
Profil
Luksa:
A jsou ty tabulky InnoDB?
Dotaz, který psal Kajman v #3 nefunguje?
Luksa
Profil *
Joker:
Ano jsou. Tabulky jsou presne vytvoreny takto:

CREATE TABLE temata (
    tid INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    tema VARCHAR(100) NOT NULL
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

CREATE TABLE vzkaz (
    vid INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    datum VARCHAR(40) NOT NULL,
    vzkaz VARCHAR(1000) NOT NULL,
    uzivatel VARCHAR(20) NOT NULL,
    id_tematu INTEGER NOT NULL,
    FOREIGN KEY (id_tematu) REFERENCES temata (tid) ON DELETE CASCADE
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;


Ten dotaz jsem nezkousel, rad bych spise vyuzil cizich klicu.
Jinak delam vse spravne?
Luksa
Profil *
Tak asi ne, ted jsem zjistil, ze MySQL na ic.cz vubec innoDB nepodporuje...Tak to bude tim.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: