Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Tworzenie zapytania - wyeliminowanie pustych wpisów
Forum PHP.pl > Forum > Przedszkole
piotr485
Witam, mam takie tabele:
katalog_firm (id, id_podkategoria)
podkategorie(id, podkategoria)


Oto moje zapytanie:

  1. $zapytanie_firm = '
  2. SELECT podkategorie.id AS id,
  3. podkategorie.podkategoria AS nazwa_firmy
  4.  
  5. FROM podkategorie
  6. WHERE podkategorie.id_kategoria = '.$_GET['id'].'
  7. ORDER BY nazwa_firmy
  8. ';


Co trzeba dodac do klauzuli WHERE aby pokazywaly sie tylko podkategorie ktore zawieraja chociaz jeden rekord w tabeli katalog_firm ? albo jak przekształcić te zapytanie ?
zzeus
  1. SELECT podkategorie.id AS id, podkategorie.podkategoria AS nazwa_firmy
  2. FROM podkategorie
  3. RIGHT JOIN katalog_firm USING(id)
  4. WHERE podkategorie.id = '.$_GET['id'].'
  5. ORDER BY nazwa_firmy
  6. GROUP BY podkategorie.id


chyba jakoś tak
piotr485
Cytat(zzeus @ 2.09.2009, 11:46:29 ) *
  1. SELECT podkategorie.id AS id, podkategorie.podkategoria AS nazwa_firmy
  2. FROM podkategorie
  3. RIGHT JOIN katalog_firm USING(id)
  4. WHERE podkategorie.id = '.$_GET['id'].'
  5. ORDER BY nazwa_firmy
  6. GROUP BY podkategorie.id


chyba jakoś tak


Coś nie bardzo to działczy - a co to robi ?

Wyświetlam sobie rekordy:
  1. $nazwa_firmy = $row['nazwa_firmy'];
  2. $id = $row['id'];

i nadal pokazują mi się również te bez wpisów


czy ktoś jest mi w stanie pomóc albo wytłumaczyc ?
zzeus
Nie działa - a jakieś błędy się pokazały ?
piotr485
Cytat(zzeus @ 2.09.2009, 12:08:01 ) *
Nie działa - a jakieś błędy się pokazały ?


Dodając GROUP BY wyskakuje bład
Dodajac samo RIGHT JOIN katalog_firm USING(id) nic sie niezmienia (ani bledow, zadnej reakcji)
  1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY podkategorie.id' at line 7


zapytanie te zamieniam na tablice i pozniej sobie wyswietlam tak dla jasnosci

Prosze o pomoc!



thek
Po pierwsze to napisałeś nam tabele bazy z błędami.
To Twoja wersja:

katalog_firm (id, id_podkategoria)
podkategorie(id, podkategoria)

Tylko czemu w zapytaniu masz nagle w tabeli podkategorie kolumnę: id_kategoria questionmark.gif

  1. SELECT podkategorie.id AS id,
  2. podkategorie.podkategoria AS nazwa_firmy
  3. FROM podkategorie
  4. WHERE podkategorie.id_kategoria = '.$_GET['id'].'
  5. ORDER BY nazwa_firmy


W takim wypadku choćbyś nie wiem co robił nic Ci nie wyświetli, bo taka kolumna nawet nie istnieje i będzie sypać błędami baza.
Jak mniemam masz jeszcze jakąś inną tabelę lub ta ma inne, dodatkowe pole id_kategoria. No chyba, że to babol i ma być:
  1. WHERE podkategorie.id = '.$_GET['id'].'


Nielogiczne w tym zapisie jest jedno: jeśli już odnosisz się do kategorii konkretnej przez jej id to tylko wyciągasz rekordy z tabeli firm, które ją mają ustawioną.
Co innego jeśli chcesz wyświetlić wszystkie kategorie z konkretną liczbą rekordów w bazie firm dla tej podkategorii. Tylko od kiedy nazwa podkategorii jest równoznaczna z nazwą firmy co sugerujesz aliasem:
Kod
podkategorie.podkategoria AS nazwa_firmy
Czy Ty właściwie wiesz co nazywasz jak, czy może po prostu nazywasz sobie kolumny i tabele pierwszymi lepszymi słowami z encyklopedii?
Dla mnie bowiem każdy wpis z katalogu_firm ma zgodnie z logiką przynajmniej 3 pola: id, nazwę_firmy, id_podkategorii i to po ostatnim łączysz obie.
Aby więc wyświetlić wszystkie kategorie nie odwołujesz się żadnym ID bo tak wyciągasz po prostu wszystkie firmy należące do danej podkategorii z bazy i jest to zapytanie proste:
  1. SELECT * FROM katalog_firm WHERE id_podkategoria = '.$_GET['id'].' ORDER BY id

A to co chcesz zrobić, czyli poznać wszystkie kategorie, które mają chociaż jedną firmę przypisaną do siebie jest uzyskiwane poprzez klauzulę HAVING
  1. SELECT p.podkategoria, count(*) AS ile FROM katalog_firm f LEFT JOIN podkategorie p ON f.id_podkategoria = p.id GROUP BY p.id HAVING ile > 0

Oczywiście możesz także chcieć zwrócić nazwy firm będących przypisanych do jakiejkolwiek kategorii (a co... kto powiedział, że firma musi być zaszufladkowana do jakiejś?) czy jakoś jeszcze inaczej. Na chwilę obecną moim zdaniem Twoja struktura bazy podana nam nie odzwierciedla bowiem rzeczywistego przyporządkowania danych. Co zresztą wytknąłem Ci poprzez nielogiczności zapytań i opisu. Najlepiej podaj choć kilka przykladowych rekordów z obu tabel.
Na razie bowiem logiczna struktura "na chłopski rozum" i opisy oraz zapytania wskazują, że albo ja jestem tępy albo nazewnictwo i zawartość tabel nie sa logiczne.
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.