Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobieranie danych z 3 tabel i porównanie ich wartości
Forum PHP.pl > Forum > Przedszkole
qweluke
Witam,


Mam 3 tabele
xxx, yyy i zzz.

Zapytaniem
  1. SELECT * FROM `xxx`, `yyy`WHERE xxx.id_uzytkownika=yyy.id

Pobieram potrzebne dla mnie wartości z tabeli xxx i yyy.

Teraz zawartość tabeli yyy muszę porównać z zawartością tabeli zzz natomiast nie wiem jak to zrobić ponieważ musi to być podczas wyświetlania zawartości tabeli yyy którą wyświetlam w następujący sposób

  1. while($rek = mysql_fetch_array($idzapytania)) {
  2. $totalHtml .= '
  3. <tr><td class="userlist">'.$rek[imie].'<br/>'.$rek[nazwisko].'</td>';
  4.  
  5. for ($i=1; $i <=$NumberOfDays; $i++) {
  6.  
  7. switch ($i) {
  8. case ($rek[$i]==$rek[godziny]): $totalHtml .= '<td><div class="grafik" style="background: #'.$rek[godziny_kolory].'">'.$rek[$i].'</div></td>';
  9. break;
  10.  
  11.  
  12. default: $totalHtml .= '<td><div class="grafik">'.$rek[$i].'</div></td>';
  13. }
  14. }
  15. }


Jak widać, przy case odbywa się ów porównanie, problem polega na tym, że jesli wybiore za jednym zamachem wszystkie potrzebne dla mnie wartości zapytaniem

  1. SELECT * FROM `xxx`, `yyy`, `zzz`WHERE xxx.id_uzytkownika=yyy.id


to każdy rekord wyświetlany jest po 4 razy, poniewaz tabela xxx ma 4 rekordy.

Myślalem, aby zrobić dodatkowe (osobne) zapytanie dla tabeli xxx

  1. SELECT * FROM `zzz`


wtedy rekordy wyświetlane byłyby prawidłwo, natomiast nie potrafie ich wtedy porównać :/

Mogę wyświetlić tabelę zzz poprzez

  1. while($rek = mysql_fetch_array($idzapytania2)) {
  2.  
  3.  
  4. echo $rek[godziny];
  5.  
  6. }


ale to mnie nie ratuje :/

Prosilbym o pomoc bo męczę się z tym od kilku godzin i nie wiem jak to ugryźć zeby było dobrze sad.gif

nic? nikt? :/

Panowie pomóżcie bo ja juz do tego nie mam siły tongue.gif

próbowałem już chyba wszystkiego i nic :/
darko
Nie wiem czy coś pomogę, bo z sqla jestem słaby (zaraz wrzucę do stopki smile.gif ) ale może spróbuj z distinct:
  1. SELECT DISTINCT * FROM `xxx`, `yyy`, `zzz`WHERE xxx.id_uzytkownika=yyy.id
qweluke
Nie pomaga, bo rekordy powtarzające się nie są takie same.

Żeby to lepiej wytlumaczyc, zobacz(cie) obrazek ponizej.

'

Samo zapytanie SQL wybiera po 4 razy imie i nazwisko poniewaz ostatnie 4 kolujmy są inne.

Wydaje mi się, że najlepiej byłoby to zrobić na dwóch zapytania SQL, bo wtedy osoby wyświetlane sa prawidłowo ale jak już pisałem wcześniej, nie wiem jak porównać dane z ostatnich czterech tabel :/
nospor
Cytat
Jak widać, przy case odbywa się ów porównanie, problem polega na tym, że jesli wybiore za jednym zamachem wszystkie potrzebne dla mnie wartości zapytaniem

[SQL] pobierz, plaintext
SELECT * FROM `xxx`, `yyy`, `zzz`WHERE xxx.id_uzytkownika=yyy.id


to każdy rekord wyświetlany jest po 4 razy, poniewaz tabela xxx ma 4 rekordy.
no tak, bo jak nie powiesz w łączeniu po czym łączysz tabele, to jest robiony iloczyn kartezjanski (czy jak to tam się nazywa) i jest kombinacja kazdy z kazdym.
Musiz w łączeniu powiedziec które pole z yyy łączy się z polem zzz, tak jak to zrobiles z xxx i yyy
qweluke
no właśnie sek w tym, że one się nie łączą ze sobą.

dane z trzeciej tabeli pobieram aby porównać je z innymi rekordami :/

Czyli przypuszczam, że tabele zzz muszę pobrać osobno tylko znow... nie wiem jak je porównać ze sobą bo nie mogę wynieść zmiennych poza pętlę while

Może jeśli dane z tabeli zzz przeniose do tablicy w php to wtedy będę mógł je porównać?


czyli podsumowując:

jak przenieść dane z pętli while do jakiejś innej zmiennej tak, abym mógł je poźniej wyświetlić/porównywać z innymi danymi?
nospor
czegos nie rozumiem:
jesli tabele nie łączą się ze sobą to jak chcesz je porównac?


No ale pomijając fakt tego mego nierozumienia, to jesli zzz ma tylko 4 rekordy jak piszesz, to pobierz je raz, zapisz do tablicy w php i rob z nimi co chcesz.
qweluke
poradzilem sobie z tym smile.gif

tablice pomogly :}

  1. while($ustawienia = mysql_fetch_array($idzapytania1)) {
  2. $gkolory[]=$ustawienia[godziny_kolory];
  3. $godziny[]=$ustawienia[godziny];
  4. $gwyswietlane[]=$ustawienia[godziny_wyswietlane];
  5. }


i wszystko ok ;]
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.