Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] zapytanie do trzech tabel i warunek
Forum PHP.pl > Forum > PHP
roghatt
Jak wykonać zapytanie(przykładowe tabele):

Tabela1
ID_produktu
Nazwa_produktu
Cena_produktu


Tabela2
ID_Atrybutu
ID_produktu
Numer_atrybutu
Cena_atrybutu

Tabela3
ID_zamowienia
ID_produktu
Nazwa_produktu
Cena_finalowa

Wypisane mają być produkty, które zostały zamówione więc te które są w Tabela3
Niektóre produkty mają atrybuty a niektóre nie mają.
Jak produkt nie posiada atrybutu to w "Tabela1" Cena produktu = jakaś konkretna liczba.
Jeśli produkt ma atrybuty (dwa rodzaje produktu) to wtedy w "Tabela1" Cena produktu=0, a w "Tabela2" Cena_atrybutu=konkretna liczba

W skrócie robiłem tak:
  1. $wynik1= mysql_query ("SELECT * FROM Tabela1 WHERE ID_produktu=$ID_produktu");
  2. while($row=mysql_fetch_array($wynik1))
  3. {
  4. $products_id=$row['products_id'];
  5. $Cena_produktu=$row['Cena_produktu'];
  6.  
  7. if($Cena_produktu==0)
  8. {
  9. $wynik2= mysql_query ("SELECT * FROM Tabela3 WHERE ID_produktu=$ID_produktu");
  10. while($row=mysql_fetch_array($wynik2))
  11. {
  12. $products_name=$row['products_name'];
  13.  
  14. $wynik3= mysql_query ("SELECT * FROM Tabela2 WHERE ID_produktu=$ID_produktu AND Numer_atrybutu=3") //numer atrybutu wybierany przeze mnie w zaleznosci co chce wypisac
  15. while($row=mysql_fetch_array($wynik3))
  16. {
  17. $Cena_atrybutu=$row['Cena_atrybutu'];
  18. $Cena=$Cena_atrybutu;
  19. }
  20. }
  21.  
  22. }
  23. else
  24. {
  25. $wynik2= mysql_query ("SELECT * FROM Tabela3 WHERE ID_produktu=$ID_produktu");
  26. while($row=mysql_fetch_array($wynik2))
  27. {
  28. $Cena_finalowa=$row['Cena_finalowa'];
  29. $Nazwa_produktu=$row['Nazwa_produktu'];
  30. $Cena=$Cena_finalowa;
  31. }
  32. }
  33.  
  34. echo $Nazwa_produktu;
  35. echo "-";
  36. echo $Cena;
  37.  
  38.  
  39.  
  40. $cena_suma= $cena_suma+$Cena;
  41. }
  42. echo $cena_suma;


Coś namieszałem z warunkami bo źle mi wypisuje
celbarowicz
ta sama nazwa produktu w tabeli1 i tabeli3 ? to jest nadmiar danych. pozdrawiam
roghatt
to akurat jest najmniej ważne, bo to nie ważne z której tabeli wyciągnę nazwę produktu, więc nie wiem po co o tym pisałeś winksmiley.jpg

W tabeli1 jest dużo więcej danych, po prostu wypisałem dla przykładu.
celbarowicz
kolego nie jest to co podaję optymalne rozwiązanie ,ale można je ulepszyć. to co podaję jest tylko wskazówką.

ustawiasz ręcznie id zamówienia(lub w pętli jeśli chcesz wypisać wszystkie pozycje-odpowiednie zapytanie o id zamówienia)
  1. $zam_nr=2;
  2.  
  3.  
  4.  
  5. $sql="SELECT
  6. a.Id_atrybutu,a.Id_produktu,a.Numer_atrybutu,a.Cena_atrybutu,b.Nazwa_produktu ,b.Cena_finalowa FROM tabela3 b LEFT JOIN tabela2 a ON b.Id_produktu=a.Id_produktu WHERE b.Id_zamowienia=".$zam_nr." ";
  7.  
  8. $result=mysql_query($sql) or die(mysql_error());
  9. echo $n=mysql_num_rows($result);echo '<br>';
  10.  
  11.  
  12. while($row=mysql_fetch_array($result)){
  13. echo $row[0]; echo '-'; echo $ip=$row[1]; echo '-'; echo $row[2]; echo '-'; echo $row[3];echo '-'; echo $row[4]; echo '-';echo '-'; echo $row[5]; echo '<br>';
  14. }
  15. echo '-------------->';echo $ip;
  16.  
  17. $sql="SELECT * FROM tabela1 WHERE Id_produktu=".$ip." ";
  18. $result2=mysql_query($sql) or die(mysql_error());
  19. while($row=mysql_fetch_array($result2)){ echo '<br>';
  20. echo $row[0]; echo '-'; echo $row[1]; echo '-'; echo $row[2]; }


sprawdź czy moje nazwy kolumn
zgadzają się z Twoimi
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.