Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Pobieranie niezduplikowanych rekordów
miniol
post 23.01.2012, 15:03:43
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 4
Dołączył: 25.03.2011

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


Mam dwie tabele:

Kod
Kategoria
=========
1. id_kategorii
2. id_produktu
3. nazwa

Produkt
=========
1. id_produktu
2. nazwa
3. cena
4. podatek


Jeden produkt może być w wielu kategoriach.

Jakie dać zapytanie, aby pobrać produkt tylko raz z tylko jedną kategorią.
Obecnie pobiera mi się tak:
  1. SELECT `kategoria`.`id_kategorii`, `kategoria`.`id_produktu`, `kategoria`.`nazwa`, `produkt`.`id_produktu`, `produkt`.`nazwa`, `produkt`.`cena`, `produkt`.`podatek`, FROM `kategoria` INNER JOIN `produkt` ON `kategoria`.`id_produktu` = `produkt`.`id_produktu`;


Wyświetla mi wynik:
Kod
1   3   albumy   3   Duży album   88.50   0.23
2   3   inne   3   Duży album   88.50   0.23
3   3   przewdniki   3   Duży album   88.50   0.23
1   4   albumy   4   fajna_rzecz   8.50   0.23
2   4   inne   4   fajna_rzecz   8.50   0.23
3   4   przewdniki   4   fajna_rzecz   8.50   0.23


Jak uzyskać wynik gdzie każdy produkt będzie miał tylko jedną kategorię czyli:
Kod
1   3   albumy   3   Duży album   88.50   0.23
1   4   albumy   3   fajna_rzecz   8.50   0.23


Próbowałem polecenia distinct, ale to działa tylko w przypadku identycznych rekordów. A ja każdy rekord mam inny.
Go to the top of the page
+Quote Post
phpion
post 23.01.2012, 15:09:31
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Pogrupuj (GROUP BY) rekordy po kateogria.id_produktu.
Go to the top of the page
+Quote Post
GoOx
post 23.01.2012, 15:09:37
Post #3





Grupa: Zarejestrowani
Postów: 329
Pomógł: 6
Dołączył: 23.11.2011
Skąd: Łódź

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


użyj WHERE
  1. SELECT `kategoria`.`id_kategorii`, `kategoria`.`id_produktu`, `kategoria`.`nazwa`, `produkt`.`id_produktu`, `produkt`.`nazwa`, `produkt`.`cena`, `produkt`.`podatek`, FROM `kategoria` INNER JOIN `produkt` ON `kategoria`.`id_produktu` = `produkt`.`id_produktu` WHERE id_produktu='$jakaś_zmienna';

Go to the top of the page
+Quote Post
miniol
post 23.01.2012, 15:22:20
Post #4





Grupa: Zarejestrowani
Postów: 84
Pomógł: 4
Dołączył: 25.03.2011

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


Cytat(phpion @ 23.01.2012, 15:09:31 ) *
Pogrupuj (GROUP BY) rekordy po kateogria.id_produktu.

Dokładnie tego szukałem! Dzięki!




Cytat(GoOx @ 23.01.2012, 15:09:37 ) *
użyj WHERE
  1. SELECT `kategoria`.`id_kategorii`, `kategoria`.`id_produktu`, `kategoria`.`nazwa`, `produkt`.`id_produktu`, `produkt`.`nazwa`, `produkt`.`cena`, `produkt`.`podatek`, FROM `kategoria` INNER JOIN `produkt` ON `kategoria`.`id_produktu` = `produkt`.`id_produktu` WHERE id_produktu='$jakaś_zmienna';

Problem w tym, że takiego warunku właśnie nie mogłem wymyślić, bo nie mogłem przewidzieć w jakiej kategorii są produkty.Zrobienie pętli też się mija z celem, bo przy kilkunastu tysiącach już będzie to spore obciążenie.
W przykładnie jaki podałem, oba produkty miały te same kategorie, więc mógłbym użyć warunku WHERE id_kategorii=1. Tylko, że jeśli produkt nie jest w kategorii albumy to zostanie pominięty, a tego bym nie chciał.
Grupowanie to właśnie to czego potrzebowałem!

Temat wyczerpany smile.gif

Ten post edytował miniol 23.01.2012, 15:24:45
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: 14.08.2025 - 07:44