relacje pomiędzy tabelami

0

Witam, czy może mi ktoś wytłumaczyć jak działają relacje w bazie danych oraz jak je zrealizować? Najlepiej jak ktoś w was mógłby podać mi jakiś przykład kodu.
Mniej więcej wiem o co chodzi jednak nie wiem jak przełożyć to na praktykę.
W wielu kursach mysql jest to tłumaczone jednak jakoś tego nie rozumiem.
Weźmy taki przykład:
Mamy w bazie dwie tabele: użytkownicy i dane, w tabeli użytkownicy dajemy klucz główny "id_user" w tabeli dane dajemy klucz główny "id_dane" oraz klucz obcy "id_user".
Teraz, jak powinien wyglądać kod php, tak aby system wiedział że użytkownikowi np. o id=2, odpowiada rekord w tabeli dane o id=4?
pozdrawiam

0

Jeżeli dopiero się uczysz to nic magicznego w kodzie nie wymyślisz (później jak ogarniesz trochę php i sql to są jeszcze różne ORMy) . Zwyczajnie łączysz odpowiednie tabele w takim PDO za pomocą JOINa i tyle.

1

Od tego są zapytania MySQL a nie kod PHP. PHP nie musi wiedzieć jakie są numerki kluczy itd. MySQL odpowiada za wyciąganie danych podług relacji. Masz przykład pierwszy z brzegu:
https://pl.wikibooks.org/wiki/PHP/Relacje_i_indeksy
Przykładowo:
jak masz np. posty na forum to każdy post przykładowo ma pole user_id które jest w relacji z tabelą users->id. Potem MySQL wyciąga zapytaniem dane (wybierz wszystkie posty gdzie id_usera=twoje_id) i wyrzuca wyniki. Jeżeli masz kilka indeksów (łączysz np. JOINem kilka tabel) możesz sobie stosować aliasy aby wiedzieć które dane z jakiej tabeli pochodzą i żeby dobrze je potem obrobić. Looknij tu: http://www.sqlpedia.pl/laczenie-tabel-sql/

Te wszystkie wyniki z MySQLa dopiero obrabia się np. PHPem. Dzięki takim relacjom możesz tworzyć bardziej złożone struktury danych do wyświetlenia, np. grupować posty podług różnych zależności czy userów, zliczać ich ilość (np. Postów - 120) albo szybko filtrować i wyszukiwać dane nie zajeżdżając bazy danych.

0

Chyba po woli zaczynam rozumieć o co w tym wszystkim chodzi jednak nie jest to nawet wierzchołek góry lodowej :D
Mam taki kod:

<?php
    include('connect.php');
    $tbl = $connect->query('SELECT * FROM `uzytkownicy` WHERE id_user= 29');
    foreach ($tbl as $key => $value) {
        echo $value['email']."<br/>";
        echo $value['last_name']."<br/>";
     }
    ?>

Połączeni z bazą za pomocą PDO i wyświetleni wyników za pomocą pętli foreach. Nawet działa wyświetlają się dane użytkownika o id 29.
Jednak jak zrobić to automatycznie, tzn, przecież numer użytkownika musi dodawać się sam, nie można robić tego ręcznie. Jeśli jestem użytkownikiem o id 28 to musi mi wyświetlać dane użytkownika 28, prawda?

0

problem php/mysql wg mnie jest taki ze brakuje wyswietlacza na baze danych wg mnie echo to za malo

w delphi 3 byl taki wyswietlacz ale bazy nie bylo w necie jak mozna zrobic teraz

1
romcio20 napisał(a):

Chyba po woli zaczynam rozumieć o co w tym wszystkim chodzi jednak nie jest to nawet wierzchołek góry lodowej :D
Mam taki kod:

<?php
    include('connect.php');
    $tbl = $connect->query('SELECT * FROM `uzytkownicy` WHERE id_user= 29');
    foreach ($tbl as $key => $value) {
        echo $value['email']."<br/>";
        echo $value['last_name']."<br/>";
     }
    ?>

Połączeni z bazą za pomocą PDO i wyświetleni wyników za pomocą pętli foreach. Nawet działa wyświetlają się dane użytkownika o id 29.
Jednak jak zrobić to automatycznie, tzn, przecież numer użytkownika musi dodawać się sam, nie można robić tego ręcznie. Jeśli jestem użytkownikiem o id 28 to musi mi wyświetlać dane użytkownika 28, prawda?

No ale co Ty chcesz osiągnąć? jak masz zamiar pobrać wszystkich użytkowników to nie dajesz warunku where i tyle. Jak masz zamiar wyświetlić np każdej zalogowanej osobie jego dane, to w warunku wstawiasz id/nick np z sesji które dodałeś zapisałeś przy logowaniu

1

założyłbym nową zmienną
$id_user= $_SESSION['id_user'];
zapytania mysql śrenio sobie radzą ze zmiennymi sesyjnymi (przynajmniej ja mam takie doświadczenia)
później już tak jak miałeś, tylko zamiast numeru na sztywno wpisujesz zmienną:
$tbl = $connect->query('SELECT * FROM uzytkownicy WHERE id_user=$id_user');

1 użytkowników online, w tym zalogowanych: 0, gości: 1