Autor | Zpráva | ||
---|---|---|---|
regy Profil |
#1 · Zasláno: 11. 11. 2012, 15:25:40
Zdravím,
lze v myslq propojit dvě tabulky tak, aby v tabulce 2 byl sloupec s hodnotou buď id z tabulky 1 nebo nic/0/apod s tím, že při smazání řádku v tabulce 1 by se smazali i záznamky v tabulce 2 navázány na tento řádek (cascade)? Jedná se mi o to, jak realiovat buď spojení s tabulkou 1 nebo nic. Díky |
||
juriad Profil |
#2 · Zasláno: 11. 11. 2012, 16:16:55
CREATE TABLE parent (id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; CREATE TABLE child (id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ) ENGINE=INNODB; stačí jen v definici sloupce parent_id neuvést NOT NULL
|
||
regy Profil |
#3 · Zasláno: 11. 11. 2012, 20:51:12
juriad:
Děkuju |
||
Prokop Profil * |
#4 · Zasláno: 14. 11. 2012, 00:58:00
Zdravím,
mám dotaz ke stejnému tématu, zkoušel jsem se dívat na ten odkaz, ale nedokážu si vydedukovat z toho co potřebuji. 1) children musi mit nazev sloupce ve tvaru "tabulka_sloupec" aby se dokazal spojit s druhou tabulkou? 2) potrebuji vyresit propojeni tabulky "messages" sloupcu "to_id" a "by_id" s tabulkou "user" sloupcem "id", jak na to? jde to? v PhpMyAdmin (dale jen PMA) mi to hazi chybu 1452, kdyz chci obema sloupcum nastavit klic 3) jde nastavit vice "children" jednomu rodici? napr tabulky "roles.user_id", "messages.user_id", "forum.user_id" maji rodice v "user.id"? 4) co je v PMA v "Struktura>Zobrazit relace" moznost "Interni relace" a "Omezeni ciziho klice"? Jaky je v tom rozdil? 5) jde propojit tabulky nasledujicim stylem "messages.identita2_id">"identita2.user_id">"user.id"? Díky za rady, v SQL jsem se s tímto setkal poprvé a nenašel jsem žádný návod, který by mi toto všechno zodpověděl jako pro blbce.. :) |
||
Kajman Profil |
#5 · Zasláno: 14. 11. 2012, 09:12:09
1) ne
2) uděláte postupně dva klíče (musíte mít innodb tabulky) 3) ano 5) ano, pokud nad sloupcem user_id je primární klíč v tabulce identita2 |
||
juriad Profil |
#6 · Zasláno: 14. 11. 2012, 09:46:38
1) používá se to pro přehlednost, aby tě hned trklo, že je to cizí klíč
2) CREATE TABLE user ( id INT NOT NULL, name VARCHAR(32), PRIMARY KEY (id) ) engine=innodb; CREATE TABLE messages ( id INT, to_id INT, by_id INT, INDEX to_ind (to_id), INDEX by_ind (by_id), FOREIGN KEY (to_id) REFERENCES user(id), FOREIGN KEY (by_id) REFERENCES user(id) ) engine=innodb; SELECT * FROM messages WHERE to_id = $to_id -- případně varianta s by_id 3) dokonce je to velice vhodné, přece nebudeš mít bambilion tabulek user 5) ano, select pak vypadá: SELECT * FROM messages JOIN identita2 ON messages.identita2_id = identita2.id JOIN user ON identita2.user_id = user.id WHERE user.name = "Franta Vomáčka" |
||
Prokop Profil * |
#7 · Zasláno: 14. 11. 2012, 18:12:21
juriad:
Díky moc za odpověď :) To je to co jsem požadoval, napsat to jako pro de*ila. Díky ;) |
||
Časová prodleva: 11 let
|
0