Autor Zpráva
FesanCZ
Profil
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
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
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
Kajman:
Omlouvám se, ale stále tomu nerozumím..
Kajman
Profil
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
FesanCZ:
Možná Vám pomůže, když to uvidíte takto:


FesanCZ
Profil
Děkuji za rady, ale stále mi to nefunguje. Stále mi tu ukazuje jen jednu část imgur.com/lTKwSrd
Kajman
Profil
Asi tam nemáte správně provázaná data. Ukažte kompletní data ze všech tří tabulek.
FesanCZ
Profil
link
Kajman
Profil
C_adresa a C_kontakt v tabulce zakaznik jsou prázdné, proto se neprovážou.
FesanCZ
Profil
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
Keeehi:
V phpmyadmin mi to vypsalo toto imgur.com/a/ZjABFJH
Je to to samé, co mi ukazuje PHP..
Kajman
Profil
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
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
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
Super, už mě to funguje. Děkuji moc rady :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0