Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> mysql - JOIN + ograniczanie wyświetlania danych do jednego wystąpienia, pokazanie raz wielokrotnie powtarzanych danych
mpps
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


witam,

mam dwie tabele i przykładowe dane:
cat:
id | cat
---------------
1 | aparat
2 | mysz
3 | monitor

oferta:
id | idcat | cat | producent
---------------------------------
1 | 1 | aparat | sony
2 | 2 | mysz | logitech
3 | 1 | aparat | canon
4 | 3 | monitor | nec
5 | 2 | mysz | a4tech
6 | 3 | monitor | lg
7 | 1 | aparat | minolta
8 | 2 | mysz | media-tech

pytanie:
jak zadać pytanie do bazy, aby kategorie (cat) wyświetlić tylko raz, mimo to, że w tabeli 'oferta' powtarzają się wielokrotnie?
  1. $result = mysql_query("select distinct * from cat t1 left outer join oferta t2 on (t1.cat = t2.cat)") OR die(mysql_error());

w zapytaniu brakuje pewnie 'where', ale no właśnie... 'where' co?
i jak później wyświetlić wyniki?
  1. <?php
  2. while($rek = mysql_fetch_array($result)){
  3. print $rek[1];
  4. }
  5. ?>

wyświetla wszystko dobrze, poza tym, że wyświetla właśnie wszystkie wystąpienia, a nie tylko raz.

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Cienki1980
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


W zapytaniu tego nie osiągniesz, bo SQL zwróci tyle wierszy ile będzie rekordów w oferta.

Jeżeli to wyświetlasz w php to porób tam warunki, które będą wyświetlały tylko raz powtarzającą sie kategorię.
Go to the top of the page
+Quote Post
frickle
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 20.04.2006
Skąd: Kraków/Lublin/Lubartów

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


Nie bardzo rozumiem pytanie. Napisz co konkretnie chesz wyświetlić z tej tabeli. Poza tym po co powtarzasz kolumnę CAT w drugiej tabeli?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) skoro jest już w pierwszej.

Jeżeli chcesz wyświetlić produkty kategoriami, to w jednym zapytaniu ci się to nie uda. Musisz do każdej kategorii zadać osobne zapytanie.
Go to the top of the page
+Quote Post
mpps
post
Post #4





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


@Cienki1980
to, że jednym z rozwiązań są warunki, to już wiem.
zastanawiam się, JAK zbudować taki warunek.
zgadzam się z Tobą, że w zapytaniu samo 'where' nic nie da.

@frickle
CAT wykorzystuję do powiązań z innymi tabelami - do mojego pytania nie ma to znaczenia.
wydaje mi się, że nie zrozumiałeś pytania, może zbyt zawile je zadałem...(?)
wynikiem ma być wyświetlenie:

aparat
mysz
monitor

(które będą linkami do kategorii, po kliknięciu których pokaże się lista produktów danej kategorii), a nie:

aparat
aparat
aparat
monitor
monitor
monitor
mysz
mysz
mysz

(jeśli byśmy w zapytaniu ustawili parametr sortowania wg 'cat'), czyli wyświetlenie WSZYSTKICH kategorii WIELOKROTNIE.

po zastanowieniu się zaczynam uważać rozwiązanie za bezsensowne...
przy kilku produktach, to możeby się i sprawdziło ale przy kilku tysiącach produktów przejście przez bazę powodowałoby chyba zbytnie obciążenie...

mimo to, jeśli ktoś z Was ma jakiś pomysł na rozwiązanie problemu, to proszę o podpowiedzi, może się w przyszłości przyda!

pozdrawiam i dzięki
Go to the top of the page
+Quote Post
maryaan
post
Post #5





Grupa: Zarejestrowani
Postów: 380
Pomógł: 2
Dołączył: 5.01.2007

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


  1. SELECT cat FROM cat WHERE id IN (SELECT DISTINCT idcat FROM oferta)
?
Go to the top of the page
+Quote Post
mpps
post
Post #6





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


Cytat(maryaan @ 31.01.2007, 00:02:18 ) *
  1. SELECT cat FROM cat WHERE id IN (SELECT DISTINCT idcat FROM oferta)
?


@MARYAAN jesteś bogiem (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
zastanawiam się jeszcze, czy jest potrzebna tutaj klauzula 'DISTINCT'?
bez niej wyniki są takie same...
ale jak to się mówi: 'jak nie zaszkodzi, to pomoże'

dziękuję wszystkim za pomoc!
Go to the top of the page
+Quote Post
maryaan
post
Post #7





Grupa: Zarejestrowani
Postów: 380
Pomógł: 2
Dołączył: 5.01.2007

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


nie przesadzaj, najprostszer ozwiazania sa najlepsze. Distinct smialo mozesz wywalic, wstawiajac go sugerowalem sie tym ze select zamiast "kilku tysiecy", zwroci maksymalnie tyle rekordow ile zawiera tablica cat. NIe wiem czy ma to jakis wplyw na wydajnosc, wydawalo mi sie to w jakis sposob sensowne wiec tak napisalem
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 27.12.2025 - 03:14