Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] połączenie 3 tabel z zawężeniem b != c
Forum PHP.pl > Forum > Przedszkole
AlinaMalutka
Popieprzyło mi się.... połączenie TRZECH tabel ale tak aby wyciągnięty był zgrupowany nr Klienta z tabeli "c" ze wszystkimi wartościami wg przedstawionuch ograniczeń -- ale najważniejsze --> nie mogą się pokazać rekordy z tabeli "b" i "c" jeżeli wartości w kolumnie Numer są identyczne....

tabela "a"

ID.|.klient.|.eMail.|.Waznosc.|.Uwagi.|
---+--------+-------+---------+-------+
1..|...57...|.e@x.xx|....84...|..fff..| <--- czyli jest bo WHERE... Wazność=84 <-- czyli jest bo a.Klient=b.Klient
2..|...47...|.g@x.xx|....17...|..ggg..| <--- czyli jest bo a.Klient=b.Klient (ale brak bo w "b" brak)
3..|...51...|.m@x.xx|....84...|..ttt..| <--- czyli jest bo WHERE... Wazność=84
4..|...77...|.r@x.xx|....84...|..uuu..| <--- czyli jest bo WHERE... Wazność=84 <-- czyli jest bo a.Klient=b.Klient
5..|...77...|.r@x.xx|....81...|..f....|
6..|...77...|.r@x.xx|....74...|..uuu..|

tabela "b"

ID.|.klient.|.data..|.Numer...|.Uwagi.|
---+--------+-------+---------+-------+
1..|...77...|.1999..|....22...|..fff..| <-- czyli jest bo a.Klient=b.Klient -- ALE NIE MA BYĆ bo b.Numar != c.Numer
2..|...47...|.2001..|....27...|..ggg..| <-- czyli jest bo a.Klient=b.Klient (ale brak bo w "a" brak)
3..|...57...|.2005..|....24...|..ttt..|
4..|...88...|.2010..|....23...|..uuu..| <-- czyli jest bo a.Klient=b.Klient -- ALE NIE MA BYĆ bo b.Numar != c.Numer
5..|...77...|.2010..|....25...|..uuu..| <-- czyli jest bo a.Klient=b.Klient

tabela "c"

ID.|.klient.|.data..|.Numer...|.Uwagi.|
---+--------+-------+---------+-------+
1..|...18...|.2010..|....22...|..fff..| <-- tu Numer powtarza się z tabelą "b" więc MA BYĆ BRAK
2..|...47...|.2010..|....23...|..ggg..| <-- tu Numer powtarza się z tabelą "b" więc MA BYĆ BRAK
3..|...51...|.2010..|....72...|..ttt..|
4..|...88...|.2010..|....74...|..uuu..|
5..|...77...|.2010..|....74...|..uuu..|



  1. $wynik = mysql_query ("SELECT a.Klient, a.eMail, a.Waznosc, b.Klient, b.Data, b.Numer, c.Klient, c.Data, c.Numer FROM a, b, c WHERE a.Waznosc = '84' AND a.Klient = b.Klient AND b.Numer != c.Numer GROUP BY c.Klient; ") or
  2. die ("błąd w pytaniu");
  3.  
  4. echo "<table CELLSPACING=0 CELLPADDING=1 BORDER=1 WIDTH=40% class=eeeee>";
  5. echo "<tr><td>...........</td></tr>";
  6.  
  7. while ($rekord = mysql_fetch_array ($wynik)) {
  8.  
  9. $recordo0 = $rekord[0];
  10. $recordo1 = $rekord[1];
  11. $recordo2 = $rekord[2];
  12. $recordo3 = $rekord[3];
  13. $recordo4 = $rekord[4];
  14. $recordo5 = $rekord[5];
  15. $recordo6 = $rekord[6];
  16. $recordo7 = $rekord[7];
  17. $recordo8 = $rekord[8];
  18.  
  19. echo "<tr><td>...........</td></tr>";
  20.  
  21. }
  22. echo "</table>";



... próbowałam w przeróżny sposób i ciągle źle... Pokazują się wszystkie razem z numerem 22 i 23 (oczywiście pomniejszone o inne zawężenia). Nie umiem zapisać tego ograniczenie. Niezależnie czy zapiszę || b.Numer != c.Numer || czy też || b.Numer = c.Numer || wynik jest identyczny... ?
amii
Spróbuj dać takie zapytanie.

  1. $wynik = mysql_query ("SELECT a.*, b.*, c.* FROM a
  2. LEFT OUTER JOIN b
  3. ON a.ID = b.ID
  4. LEFT OUTER JOIN c
  5. ON b.ID = c.ID
  6. WHERE a.Waznosc = '84'
  7. AND a.Klient = b.Klient
  8. AND b.Numer != c.Numer
  9. GROUP BY c.Klient;")



AlinaMalutka
Nie było mnie kilka dobrych dni więc po przyjeździe z wielkim zadowoleniem zobaczyłam, że jednak ktoś próbował mi pomóc... Zaeksperymentowałam na tej podpowiedzi ale niestety nic to nie daje. W ogóle nasuwa mi się wrażenie, że w SELECT... nie działa wartość zawężenia xxxx != zzzz. Działa jak najbardziej xxxx = zzzz ale z "!=" nic mi nie wychodzi. Problem wykluczenia poprzez != dalej otwarty. Chyba coś pominęłam lub nie umiem zauważyć (może przefarbuję się na rudą to załapię ).
Jak ktoś mi podpowie to będę wdzięczna...
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.