Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Proste zapytanie do bazy.
Forum PHP.pl > Forum > Przedszkole
matssuda
Witam.
Nie mogę poradzić sobie z takim zapytaniem.
Są np. dwie tabele takiej struktury:



  1. produkty -> produkty _id | produkty _nazwa
  2.  
  3. foto -> foto_id | foto_nazwa | produkty_id




Chcę wyciągnąć wszystkie produkty i do każdego zdjęcie

Struktura zapytania i skryptu jest mniej więcej taka:



  1. <?php
  2. $myProd = $pdo -> query('SELECT produkty.produkty_nazwa, foto.foto_nazwa 
  3.  FROM produkty, foto 
  4.  WHERE produkty.produkty_id = foto.produkty_id');
  5. while ($row = $ myProd -> fetch())
  6. { 
  7. echo $row['produkty_nazwa'];
  8. echo $row['foto_nazwa'];
  9. }
  10. ?>


Wszystko jest ok, skrypt pokazuje wszystkie produkty oraz wszystkie zdjęcia przypisane do nich.

Ale chciałbym aby skrypt pokazywał tylko jedno zdjęcia do danego produktu nawet jeżeli jest kilka zdjęć przypisanych do niego.
elemek
na koncu quera limit 1 ? tongue.gif
matssuda
No nie bardzo smile.gif
Chce mieć pobrane wszystkie dane z tabeli produkty i do każdego z produktów po jednej fotce (nawet jeżeli jest więcej fotek)

Dwoma zapytaniami wyglądało by to tak:

  1. <?php
  2. $myProd =$pdo-> query('SELECT * FROM produkty');
  3.  
  4. while ($row = $myProd->fetch()) 
  5. {
  6. echo $row['produkty_nazwa'];
  7.  
  8. $myFoto =$pdo-> query('SELECT * FROM foto WHERE produkty_id='.$row['produkty_id'].' ');
  9. $rows = $myFoto->fetch();
  10. echo $rows['foto_nazwa'];
  11. }
  12. ?>


ale chce to zrobic w jednym.
WebCM
  1. SELECT p.produkty_nazwa, f.foto_nazwa FROM produkty p INNER JOIN foto f ON p.produkty_id = f.produkty_id
matssuda
To zapytanie daje ten sam efekt co moje wyżej.
Wyjaśnię jeszcze raz.
Są w bazie 2 produkty (tabela produkty), każdy z nich ma przypisane np. po 2 zdjęcia (tabela foto)
Łącznikiem jest produkty_id (wystepuje w tabeli produkty i foto)

Skrypt ma wyświetlić WSZYSTKIE produkty i zdjęcia przypisane do nich - ale tylko jedno zdjęcie.
Moje zapytanie daje efekt:

Kod
Produkt 1: zegarek
   zdjęcie 1: tarcza zegarka
  
   Produkt 1: zegarek
   zdjęcie 2; pasek zegarka
  
   Produkt 2: okulary
   zdjęcie 1: szkiełka
  
   Produkt 2: okulary
   zdjecie 2: oprawki


A chcę żeby wynik był:
Kod
Produkt 1: zegarek
   zdjęcie 1: tarcza zegarka
  
   Produkt 2: okulary
   zdjęcie 1: szkiełka


Może z pętlą muszę kombinować a nie zapytaniem?
JoShiMa
  1. SELECT p.produkty_nazwa, (SELECT f.foto_nazwa FROM foto f WHERE p.produkty_id = f.produkty_id LIMIT 1 ) FROM produkty p
szpakoo
można też bez podzapytań, które strasznie spowalniają:
  1. SELECT produkty_nazwa, f.foto_nazwa
  2. FROM produkty AS p
  3. LEFT JOIN foto AS f
  4. USING ( produkty_id )
  5. GROUP BY produkty_nazwa
elemek
Cytat(matssuda @ 21.08.2008, 09:47:17 ) *
Witam.
Nie mogę poradzić sobie z takim zapytaniem.
Są np. dwie tabele takiej struktury:



  1. produkty -> produkty _id | produkty _nazwa
  2.  
  3. foto -> foto_id | foto_nazwa | produkty_id


  1. SELECT DISTINCT(product_id) AS pid, produkty_nazwa, foto_id, ...
  2. FROM produkty JOIN foto USING (product_id)
  3. WHERE ...


jeden produkt - jedno foto, ilosc produktow dowolna
matssuda
Dziękuję wszystkim za odpowiedź. Trzy ostatnie posty pomogły.
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.