Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]Proste zapytanie do bazy.
matssuda
post 21.08.2008, 08:47:17
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 7.02.2008

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


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.
Go to the top of the page
+Quote Post
elemek
post 21.08.2008, 08:51:08
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 24
Dołączył: 14.08.2008

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


na koncu quera limit 1 ? tongue.gif


--------------------
Rzecz trudną rozbijam na kilka łatwiejszych :)
Pomogłem? Kliknij Pomógł.
Go to the top of the page
+Quote Post
matssuda
post 21.08.2008, 09:05:50
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 7.02.2008

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


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.

Ten post edytował matssuda 21.08.2008, 09:11:52
Go to the top of the page
+Quote Post
WebCM
post 21.08.2008, 09:17:33
Post #4





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


  1. SELECT p.produkty_nazwa, f.foto_nazwa FROM produkty p INNER JOIN foto f ON p.produkty_id = f.produkty_id


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
matssuda
post 21.08.2008, 09:37:30
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 7.02.2008

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


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?
Go to the top of the page
+Quote Post
JoShiMa
post 21.08.2008, 09:47:08
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


  1. SELECT p.produkty_nazwa, (SELECT f.foto_nazwa FROM foto f WHERE p.produkty_id = f.produkty_id LIMIT 1 ) FROM produkty p


--------------------
Go to the top of the page
+Quote Post
szpakoo
post 21.08.2008, 10:15:41
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 16
Dołączył: 19.04.2007

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


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


Ten post edytował szpakoo 21.08.2008, 10:16:10


--------------------
Go to the top of the page
+Quote Post
elemek
post 21.08.2008, 10:51:14
Post #8





Grupa: Zarejestrowani
Postów: 71
Pomógł: 24
Dołączył: 14.08.2008

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


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


--------------------
Rzecz trudną rozbijam na kilka łatwiejszych :)
Pomogłem? Kliknij Pomógł.
Go to the top of the page
+Quote Post
matssuda
post 21.08.2008, 11:43:00
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 7.02.2008

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


Dziękuję wszystkim za odpowiedź. Trzy ostatnie posty pomogły.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 06:18