Autor | Zpráva | ||
---|---|---|---|
FesanCZ Profil |
#1 · Zasláno: 21. 2. 2019, 13:49:13
Dobrý den, mám dotaz. Mám 3 tabulky, které potřebuji spojit, ale vypisuje mi to vždy jen část. Tabulky Zakaznik kontakt adresa. A vypisuje mi to tohle imgur.com/w9AlSHZ
Děkuji za případné rady. Děkuji Přikládám ještě kód.. <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> </head> <body> <a href="data.php">Nový zápis do texťáku</a> <a href="zapis.php">Zapsat do tabulky</a> <table border="1"> <?php $link = mysqli_connect("127.0.0.1", "root", "", "obchod", "3306"); if ($link === false) { die("Nepodařilo se připojit do databáze 71. " . mysqli_connect_error());} $sql = " SELECT * FROM zakaznik LEFT JOIN kontakt ON zakaznik.C_kontakt = kontakt.id_kontakt RIGHT JOIN adresa ON zakaznik.C_adresa = adresa.id_adresa "; $result = mysqli_query($link, $sql); if (mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_assoc($result)) { echo ("<tr>"); echo "<td>" . $row["jmeno"] . "</td>"; echo "<td>" . $row["prijmeni"] . "</td>"; echo "<td>" . $row["vek"] . "</td>"; echo "<td>" . $row["telefon"] . "</td>"; echo "<td>" . $row["email"] . "</td>"; echo "<td>" . $row["schranka"] . "</td>"; echo "<td>" . $row["ulice"] . "</td>"; echo "<td>" . $row["mesto"] . "</td>"; echo "<td>" . $row["psc"] . "</td>"; echo "<td>" . $row["stat"] . "</td>"; echo ("</tr>"); } } ?> </table> </body> </html> |
||
Kajman Profil |
Použijte i v druhém případě LEFT JOIN.
Pokud chcete všechny zákazníky bez ohledu na to, zda existuje odpovídající adresa, a trváte na right joinu, tak musí být adresa right join zakaznik left join kontakt. |
||
FesanCZ Profil |
#3 · Zasláno: 21. 2. 2019, 14:28:49
Kajman:
Takhle to myslíte ? SELECT * FROM kontakt RIGHT JOIN zakaznik ON zakaznik.C_kontakt = kontakt.id_kontakt RIGHT JOIN adresa ON adresa.id_adresa = zakaznik.C_adresa |
||
Kajman Profil |
#4 · Zasláno: 21. 2. 2019, 14:44:02
Ne. Přečtěte si [#2] znovu a lépe.
en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join en.wikipedia.org/wiki/Join_(SQL)#Right_outer_join |
||
FesanCZ Profil |
#5 · Zasláno: 21. 2. 2019, 15:05:36
Kajman:
Omlouvám se, ale stále tomu nerozumím.. |
||
Kajman Profil |
#6 · Zasláno: 21. 2. 2019, 15:44:28
První rada je jednoduchá, stačí nahradit RIGHT za LEFT.
SELECT * FROM zakaznik LEFT JOIN kontakt ON zakaznik.C_kontakt = kontakt.id_kontakt LEFT JOIN adresa ON zakaznik.C_adresa = adresa.id_adresa Druhá věta je složitější a je potřeba přeskládat pořadí tabulek, abyste si mohl užít i LEFT i RIGHT join. SELECT * FROM adresa RIGHT JOIN zakaznik ON zakaznik.C_adresa = adresa.id_adresa LEFT JOIN kontakt ON zakaznik.C_kontakt = kontakt.id_kontakt |
||
Kcko Profil |
#7 · Zasláno: 21. 2. 2019, 15:48:38
FesanCZ:
Možná Vám pomůže, když to uvidíte takto: ![]() |
||
FesanCZ Profil |
#8 · Zasláno: 21. 2. 2019, 17:29:55
Děkuji za rady, ale stále mi to nefunguje. Stále mi tu ukazuje jen jednu část imgur.com/lTKwSrd
|
||
Kajman Profil |
#9 · Zasláno: 21. 2. 2019, 18:55:19
Asi tam nemáte správně provázaná data. Ukažte kompletní data ze všech tří tabulek.
|
||
FesanCZ Profil |
#10 · Zasláno: 21. 2. 2019, 22:39:25
|
||
Kajman Profil |
#11 · Zasláno: 21. 2. 2019, 22:56:41
C_adresa a C_kontakt v tabulce zakaznik jsou prázdné, proto se neprovážou.
|
||
FesanCZ Profil |
#12 · Zasláno: 22. 2. 2019, 09:38:28
Kajman:
Tabulky jsem naplnil, ale furt se neprovážou a ukazuje mi to furt to samé. :( |
||
Keeehi Profil |
FesanCZ:
A použil jsi toto? SELECT * FROM zakaznik LEFT JOIN kontakt ON zakaznik.C_kontakt = kontakt.id_kontakt LEFT JOIN adresa ON zakaznik.C_adresa = adresa.id_adresa Jesli ano, tak nejdříve to vyzkoušej v phpMyAdmin abychom eliminivali možnost chyby v php kódu. Nefunguje to ani tam? Tak nám ukaž, jak jsi ten obsah tabulek upravil. |
||
FesanCZ Profil |
|||
Kajman Profil |
#15 · Zasláno: 22. 2. 2019, 10:34:16
Sloupec C_kontakt v tabulce zakaznik má být číselného typu a nabývat hodnoty ze sloupce id_kontakt z tabulky kontakt.
Sloupec C_adresa v tabulce zakaznik má být číselného typu a nabývat hodnoty ze sloupce id_adresa z tabulky adresa. Když si na těch sloupcích opravíte datový typ a nastavíte si na nich cizí klíče, tak Vám to tam už takové nesmysly nepovolí uložit. |
||
FesanCZ Profil |
#16 · Zasláno: 22. 2. 2019, 10:39:29
Kajman:
Myslíte tím, že na cizí klíče mám přidat AI aby s každou novou položkou měli jiné číslo? |
||
Kajman Profil |
#17 · Zasláno: 22. 2. 2019, 10:50:57
Ne, myslím, že byste si měl nastudovat, co jsou cizí klíče a vůbec jak fungují relační databáze.
Primární klíč tabulky kontakt je nad sloupcem id_kontakt. V tabulce kontakt máte dva řádky - jeden má v sloupci id_kontakt hodnotu 1 a druhý 2. Když se chcete z tabulky zakaznik provázat data na tyto řádky, použijete tedy ve sloupci C_kontakt hodnotu 1 (pokud chcete provázat z daty prvního řádku) nebo hodnotu 2 (pokud chcete provázat s daty z druhého řádku) nebo NULL (pokud nechcete provázat s žádným řádkem). Jiná data ve sloupci C_kontakt nemají co dělat - a to by pohlídat ten cizí klíč. |
||
FesanCZ Profil |
#18 · Zasláno: 22. 2. 2019, 11:40:19
Super, už mě to funguje. Děkuji moc rady :)
|
||
Časová prodleva: 6 let
|
0