| 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: 7 let
|
|||
0