Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Pobieranie danych z 3 tabel i porównanie ich wartości
qweluke
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/sad.gif)

nic? nikt? :/

Panowie pomóżcie bo ja juz do tego nie mam siły (IMG:style_emoticons/default/tongue.gif)

próbowałem już chyba wszystkiego i nic :/

Ten post edytował qweluke 6.04.2010, 18:48:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Nie wiem czy coś pomogę, bo z sqla jestem słaby (zaraz wrzucę do stopki (IMG:style_emoticons/default/smile.gif) ) ale może spróbuj z distinct:
  1. SELECT DISTINCT * FROM `xxx`, `yyy`, `zzz`WHERE xxx.id_uzytkownika=yyy.id
Go to the top of the page
+Quote Post
qweluke
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


Nie pomaga, bo rekordy powtarzające się nie są takie same.

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

(IMG:http://ifotos.pl/mini/wynik_nnwpre.jpg) '

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 :/
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
qweluke
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
qweluke
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


poradzilem sobie z tym (IMG:style_emoticons/default/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 ;]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 19:08