Pobieranie danych z bazy relacją wiele do wielu

0

Witam, mam problem z wyświetlaniem wyników z bazy danych. Mianowicie posiadam trzy tabele:
-Jedna zawierająca użytkownika i id.
-Druga zawiera zawód i id.
-Trzecia łącząca.
Niby wyniki się pobierają, ale tylko pojedynczo. Jak np. użytkownik miał kilka zawodów to pobiera się tylko jeden.

$P = $_POST["select"];

    $query = "SELECT `id_uzytkownika` FROM `tabela_laczaca` WHERE `id_zawodu` = $P"; 

    $result2 = mysqli_query($connect, $query);

    while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC)):;

    $query = "SELECT * FROM `zawod` WHERE `id` = $row2[ids]"; 

    $result1 = mysqli_query($connect, $query);

    endwhile;

To jest łączenie ze zmienną z select boxa.
A teraz wyświetlanie:

<?php while($row1 = mysqli_fetch_array($result1)):;?>
            
        <name class="names"><?php echo $row1[sname];?></name>

        <img class="imgs" src="<?php echo $row1[img];?>">

        <a class="links" href="<?php echo $row1[links];?>" target="_blank"><button>Przejdź na stronę zawodu</button></a>

        <?php endwhile;?>

I moje pytanie brzmi: Co jest przyczyną że gdy do użytkownika przypisane jest kilka zawodów wyświetla się tylko jeden?

0

Drogi kolego. Wybierasz tutaj z tabeli łączącej (zwanej PIVOT) id użytkownika gdzie podajesz id zawodu. Co za tym idzie jest tylko jeden wpis. Jeżeli użytkownik pracował w kilku zawodów to i tak wybierasz jeden. Być może powinno być zamiast:

$query = "SELECT `id_uzytkownika` FROM `tabela_laczaca` WHERE `id_zawodu` = $P";

to dać to aby wybrać z tabeli łączącej wszystkie zawody dla danego użytkownika

$query = "SELECT `id_zawodu ` FROM `tabela_laczaca` WHERE `id_uzytkownika ` = $P";
0

Niestety nie może tak być, ponieważ $P jest powiązane z id_użytkownika. Pobiera się dobrze tylko nie wszystko. Myślę że błąd tkwi w elemencie który wyświetla tylko nie wiem gdzie.

0

Ale po co tak to dzielisz na 2 zapytania? Poczytaj sobie o relacjach i o joinach.

0

Nie wiem czy dobrze widzę, ale pierwszym zapytaniu pobierasz jakieś id użytkowników, ale później wykorzystujesz to id użytkownika w miejscu id zawodu. Strzelam że działa to przypadkiem, bo id-ki to małe liczby i akurat pasują. Najlepiej wrzuć przykład na http://sqlfiddle.com/ albo podobny tool, bo w tym PHP ciężko się wyznać :) i tak jak kolega wyżej, poczytaj o joinach, bo to znacznie lepszy sposób na twój problem.

Plus, co to jest ids?

0

Tak jestem początkującym. Dzięki za odpowiedzi chętnie poczytam o joinach. Ids to Id speciality z bazy czyli id zawodu.

0
Radek Napora napisał(a):

Witam, mam problem z wyświetlaniem wyników z bazy danych. Mianowicie posiadam trzy tabele:
-Jedna zawierająca użytkownika i id.
-Druga zawiera zawód i id.
-Trzecia łącząca.
Niby wyniki się pobierają, ale tylko pojedynczo. Jak np. użytkownik miał kilka zawodów to pobiera się tylko jeden.

$P = $_POST["select"];

    $query = "SELECT `id_uzytkownika` FROM `tabela_laczaca` WHERE `id_zawodu` = $P"; 

    $result2 = mysqli_query($connect, $query);

    while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC)):;

    $query = "SELECT * FROM `zawod` WHERE `id` = $row2[ids]"; 

    $result1 = mysqli_query($connect, $query);

    endwhile;

I moje pytanie brzmi: Co jest przyczyną że gdy do użytkownika przypisane jest kilka zawodów wyświetla się tylko jeden?

Typowy błąd początkującego

while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC)):; 

dałeś średnik na końcu co sprawiło że pętla jest pusta i tylko ten kod sie wykonał raz

$query = "SELECT * FROM `zawod` WHERE `id` = $row2[ids]"; 
0

Nic to nie dało : (

1

Dobra zrobiłem tak jak mi radziliście czyli w jednym zapytaniu i działa wielkie dzięki ;)

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