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

SELECT podkategorie.id AS id,
podkategorie.podkategoria AS nazwa_firmy
FROM podkategorie
WHERE podkategorie.id_kategoria = '.$_GET['id'].'
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ć:
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:
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
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.