Pobieranie danych z bazy relacją wiele do wielu

Odpowiedz Nowy wątek
2019-05-12 11:56
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?

edytowany 1x, ostatnio: Radek Napora, 2019-05-12 11:58
Masz dwie takie same zmienne $query - zdun2 2019-05-12 19:53
Nie ma znaczeni pierwsza zmienna wpadla do result 2 a druga jest w petli wiec druga nalozyla sie na pierwsza ktora nie jest potrzebna juz - fporzo 2019-05-12 22:20

Pozostało 580 znaków

2019-05-12 14:00
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";

Pozostało 580 znaków

2019-05-12 17:13
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.

Pozostało 580 znaków

2019-05-12 17:35

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

Pozostało 580 znaków

2019-05-12 18:15
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?

edytowany 1x, ostatnio: kelog, 2019-05-12 18:16
No też to mu pisałem :) heheh i zamiast zrobić jeszcze joiny i mieć to w jednym zapytaniu to wali foreach w pętli i zapycha baze - fporzo 2019-05-12 18:18
E tam, też tak robiłem jak się uczyłem SQL na studiach, więc nie oceniam :) oczywiście tylko w celach edukacyjnych :) - kelog 2019-05-12 18:22
No każdy chyba tak robił. Teraz nie do pomyślenia że ktos pisze kod i w htmlu wstawia kod sql :) - fporzo 2019-05-12 18:26
Jeszcze kilka lat do studiów mi brakuje. Mam 15 lat i uczę się od was :) - Radek Napora 2019-05-12 20:00

Pozostało 580 znaków

2019-05-12 18:42
0

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

Pozostało 580 znaków

2019-05-12 22:21
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]"; 
edytowany 1x, ostatnio: fporzo, 2019-05-12 22:21
tam jest while: do pary z endwhile;, średnik jest już wewnątrz tego bloku. - Patryk27 2019-05-13 08:11

Pozostało 580 znaków

2019-05-13 16:06
0

Nic to nie dało : (

To rob to w jednym zapytaniu no i to $P powinno byc id uzytkownika a nie id zawodu - fporzo 2019-05-13 22:16

Pozostało 580 znaków

2019-05-14 18:20
1

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

edytowany 1x, ostatnio: Radek Napora, 2019-05-14 18:21
No I czadersko :) to teraz wywal co robisz i przejdz na Laravela - fporzo 2019-05-15 14:19
Dzięki za sugestie na pewno to zrobię :) - Radek Napora 2019-05-17 20:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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