Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Pobieranie danych z wielu tabel podczas wykonywania pętli
Forum PHP.pl > Forum > Przedszkole
jagrok
Witajcie ponownie,

Wszystkie kursy które studiuje mówią o pobieraniu danych za pomocą query ale tylko w przypadku jednej tabeli.
Co w przypadku gdy muszę pobrać z większej ilości miejsc dane ale wciąż muszę zastosować pętle while ?

mam fragment kodu który wymaga powtórzenia w pętli


Kod
<div class="cbp-item KATEGORIA">
                        <div class="cbp-caption">
                            <div class="cbp-caption-defaultWrap">
                                <img src="img/works/ZDJECIE.jpg" alt=""/>
                            </div>
                            <div class="cbp-caption-activeWrap">
                                <div class="th-detail">
                                    <div class="cbp-l-caption-alignCenter">
                                        <div class="cbp-l-caption-body">
                                            <div class="cbp-l-grid-projects-title">TYTUŁ</div>
                                            <a href="projects/project1.php" class="cbp-singlePage cbp-l-caption-buttonLeft">więcej</a>
                                            <a href="img/works/helios1.jpg" class="cbp-lightbox cbp-l-caption-buttonRight" data-title="TYTUŁ<br>OPIS">powiększ</a>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>


KATEGORIA - parametr pobierany z tabeli category
ZDJĘCIE - parametr pobierany z tabeli gallery
TYTUŁ - parametr pobierany z tabeli title
OPIS - parametr pobierany z tabeli project

Wszystkie 4 tabele są powiązane ze sobą za pomocą id tabeli kategoria - jednak nie są zrobione relacje w bazie danych.
Za pomocą JOINA jestem w stanie połączyć się z dwiema tabelami naraz i wyświetlić dla nich wspólne cechy dla danego połączenia.
Jak zatem wykonać takie zapytanie do 4 lub większej ilości tabel, lub jak to zrobić inaczej tak żeby było zrobione zgodnie ze sztuką ?

Próbowałem bawić się z relacjami many to many ale napotkałem na kłopoty z powiązaniami.
Czy ktoś podpowie jak to zrealizować poprawnie ?
nospor
Cytat
Za pomocą JOINA jestem w stanie połączyć się z dwiema tabelami naraz i wyświetlić dla nich wspólne cechy dla danego połączenia.
Nie. Za pomoca JOIN mozesz polaczyc sie z dowolna iloscia tabel a nie tylko dwoma. JOIN mozna uzywac wielokrotnie w jednym zapytaniu i laczyc ze soba kolejne pary tabel
jagrok
Czyli takie rozwiązanie multiple JOIN pomoże mi zrealizować powyższe zadanie ?
nospor
Moze. Choc osobiscie polecam poczytac o roznicach miedzy JOIN a LEFT JOIN bo mozesz sie przejechac wink.gif
jagrok
Dziękuje za pomoc, udało mi się osiągnąć to co zamierzałem za pomocą:

  1.  
  2. SELECT portfolio_category.category_name, portfolio_title.title, portfolio_gallery.img, portfolio_project.description
  3. FROM portfolio_category
  4. INNER JOIN portfolio_gallery ON portfolio_category.id=portfolio_gallery.cat_id
  5. INNER JOIN portfolio_title ON portfolio_category.id=portfolio_title.cat_id
  6. INNER JOIN portfolio_project ON portfolio_category.id=portfolio_title.cat_id
  7.  
nospor
Miej tylko na uwadze, ze z INNER JOIN, jak nie bedzie istnial jakis wpis w JOINowanej tabeli, to cale zapytanie nic ci nie zwroci.
Przy LEFT JOIN zwroci wszystko procz danych z tabeli, gdzie nie istnieje zlaczenie. Czesto sie to spotyka wlasnie w galeriach, gdzie masz jakis np. produkt, ktory jeszcze nie ma zdjec.
jagrok
No wlasnie spotkalem sie z problemem ze wyswietla mi podwojnie dane smile.gif
Ciężko to ogarnąć na samym początku przygód
nospor
No jesli tabela zlaczana ma kilka rekordow dla rekordu dolaczanego to tak, dane sie beda powtarzac - dosc logiczne smile.gif
jagrok
A da się to jakoś wykluczyć ? Bo dodając kolejne wpisy w bazie rzeczy zaczynają mi się multiplikować
nospor
Albo musisz grupowac (GROUP BY) i laczyc dane na poziomie mysql
Albo w php obrabiac te dane zanim zaczniesz wyswietlac.

Ja zazwyczaj robie to drugie

jagrok
Czy mogę prosić o szczegóły obróbki tych danych w PHP ?
nospor
http://nospor.pl/grupowanie-wynikow.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.