relacje pomiędzy tabelami

relacje pomiędzy tabelami
R2
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:8
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

DO
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Warszawa
  • Postów:213
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.

HA
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 7 lat
  • Postów:335
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.

R2
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:8
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:

Kopiuj
<?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

PA
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 6 lat
  • Postów:339
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:

Kopiuj
<?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

R2
Dokładnie, chcę wyświetlić każdej zalogowanej osobie jej dane. Mam id z zmiennej sesyjnej $_SESSION['id_user'] tylko jak to umieścić w warunku?
pawelpcpawelpc
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 7 lat
  • Lokalizacja:Kraków
  • Postów:5
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');

PA
Przecież on ma to w sesji i napisałem mu wyżej jak ma zrobić, po co dublujesz odpowiedź/

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.