Skocz do zawartości

Pobranie danych z tabel - relacje wiele do wielu


arturpio

Rekomendowane odpowiedzi

Mam 4 tabele:
posty:
post_id
tytul

media:
media_id
filename
type

tabela łącząca posty i video (type: 'video' w tabeli media):
post_video:
post_id
media_id

tabela łącząca posty i grafikę (type: 'image' w tabeli media):
post_image:
post_id
media_id

Formularz dodawania posta ma oddzielne pole na zdjęcia i video. W jednym wpisie może być więcej jak jedno zdjęcie, i więcej jak jedno wideo, zarówno to samo zdjęcie jak i wideo może być przypisane do więcej jak jednego wpisu. Jak zadać pytanie żeby pobrać wszystkie multimedia dla wpisu post_id=1 i pokazać je na stronie, ewentualnie dane te umieścić w formularzu edycji wpisu? Do tej pory wybierałem dane z jednej tabeli, nie łączyłem ze sobą danych z różnych tabel, wiem że pewnie muszę użyć któregoś join, tylko nie bardzo wiem którego joina i w jaki sposób... Dopiero zaczynam swoją przygodę z relacjami w tabelach...

Odnośnik do komentarza
Udostępnij na innych stronach

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Nie pobierzesz tak rekordów jednym zapytaniem, że w A będzie jedno i do tego w tablicy znajdzie się druga tablica . Jak sama nazwa mówi złączenie i będzie liniowe. Musisz to realizować osobnym zapytaniem.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

okej, skoro w takie tablicy o jakiej pisałem się nie da to jak powinien wyglądać wynik abym mógł pobrać wszystko co dotyczy post_id=1 jednym zapytaniem? Będę próbował osiągnąć to sam tylko nie wiem jak powinien wyglądać wynik, do czego dążyć

czy np tak:

p.post_id|p.title|v.media_id|v.filename|im.media_id|im.filename
1|post 1 title|1|movie1.avi|5|image1.jpg
1|NULL|2|movie2.avi|3|image5.jpg
1|NULL|4|movie6.avi|NULL|NULL

czy jakoś inaczej?

Odnośnik do komentarza
Udostępnij na innych stronach

Dla rodzajów JOIN polecam ściągę https://i.stack.imgur.com/66zgg.png .

Czy na pewno jest sens używać 2 tabel łączących media i post? Przecież typ pliku (video/image) masz zapisane w tabeli media kolumna type więc filtrować możesz przez zapytanie mysql (WHERE type="video" lub pobrać wszystkie i np. za pomocą php rozdzielić).

posty:
post_id
tytul

media
:
media_id
filename
type


posty_media:
post_id
media_id

Jeśli chcesz pobrać tytuł jednego postu oraz dostępne grafiki dla tego postu to widzę 2 ścieżki:

  1. 1 zapytanie: SELECT * FROM posty JOIN LEFT posty_media ON (posty z media) JOIN media ON (media z posty_media) WHERE post_od=1 - wtedy masz jedno zapytanie ale jeśli grafik przypisanych do postów masz więcej to w każdym masz nadmiarowe dane tytułu
  2. 2 zapytania: pobrać dane z kolumny posty a następnie pobrać dane z media używając INNER JOIN (jeden do jeden)

Jeśli tworzysz w PHP bez frameworka polecam zapoznanie się z pl.wikibooks.org/wiki/PHP/Biblioteka_PDO (obsługa relacji)

Radeq blog - już mniej o SEO ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności