Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql - JOIN + ograniczanie wyświetlania danych do jednego wystąpienia
Forum PHP.pl > Forum > Bazy danych
mpps
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
Cienki1980
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ę.
frickle
Nie bardzo rozumiem pytanie. Napisz co konkretnie chesz wyświetlić z tej tabeli. Poza tym po co powtarzasz kolumnę CAT w drugiej tabeli?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.
mpps
@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
maryaan
  1. SELECT cat FROM cat WHERE id IN (SELECT DISTINCT idcat FROM oferta)
?
mpps
Cytat(maryaan @ 31.01.2007, 00:02:18 ) *
  1. SELECT cat FROM cat WHERE id IN (SELECT DISTINCT idcat FROM oferta)
?


@MARYAAN jesteś bogiem 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!
maryaan
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
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.