Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Złożone zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
sebekzosw
Oto zrzut tabeli:
  1. --
  2. -- Struktura tabeli dla `kategorie_stron`
  3. --
  4.  
  5. CREATE TABLE `kategorie_stron` (
  6. `kategoria_id` int(11) NOT NULL AUTO_INCREMENT,
  7. `kategoria_link` varchar(255) collate utf8_polish_ci NOT NULL,
  8. `kategoria_id_glownej` int(11) NOT NULL DEFAULT '0',
  9. `kategoria_ikona` varchar(100) collate utf8_polish_ci NOT NULL,
  10. `kategoria_nazwa` text collate utf8_polish_ci NOT NULL,
  11. `kategoria_opis` text collate utf8_polish_ci NOT NULL,
  12. `kategoria_tag_tytul` text collate utf8_polish_ci NOT NULL,
  13. `kategoria_tag_opis` text collate utf8_polish_ci NOT NULL,
  14. `kategoria_tak_sk` text collate utf8_polish_ci NOT NULL,
  15. `kategoria_lz` text collate utf8_polish_ci NOT NULL,
  16. PRIMARY KEY (`kategoria_id`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=9 ;
  18.  
  19. --
  20. -- Zrzut danych tabeli `kategorie_stron`
  21. --
  22.  
  23. INSERT INTO `kategorie_stron` (`kategoria_id`, `kategoria_link`, `kategoria_id_glownej`, `kategoria_ikona`, `kategoria_nazwa`, `kategoria_opis`, `kategoria_tag_tytul`, `kategoria_tag_opis`, `kategoria_tak_sk`, `kategoria_lz`) VALUES
  24. (3, 'internet-i-komputery', 0, '', 'Internet i komputery', 'fsdfdsfsd', '', '', '', ''),
  25. (4, 'biznes', 0, '', 'Biznes', 'fsdf', '', '', '', ''),
  26. (5, 'test', 3, '', 'Test', 'fsdf', '', '', '', ''),
  27. (7, 'gry-komputerowe', 3, '', 'Gry komputerowe', 'dsfsdf', '', '', '', '');


Chce wyświetlić wszystkie główne kategorie (czyli te co mają kategoria_id_glownej='0') a w nawiasie po przecinku wszystkie te co są podkategoriami głównej kategorii, czyli np.: Internet i komputery (Gry komputerowe, Test)

Lecz nie mam bladego pojęcia jak to zrobić? Mógłby ktoś jakoś pomóc?

Chciałem to zrobić jakoś w ten sposób, ale nie działa i w pewnym miejscu już się pogubiłem ;/ sad.gif:
  1. SELECT ks.`kategoria_id` , ks.`kategoria_link` , ks.`kategoria_id_glownej` , ks.`kategoria_ikona` , ks.`kategoria_nazwa`,
  2. (SELECT ks2.`kategoria_id` , ks2.`kategoria_link` , ks2.`kategoria_id_glownej` , ks2.`kategoria_ikona` , ks2.`kategoria_nazwa` FROM `kategorie_stron` ks2 WHERE ks2.kategoria_id_glownej = ks.kategoria_id) AS podkategorie
  3. FROM `kategorie_stron` ks


Bardzo proszę po pomoc smile.gif
zzeus
  1. SELECT ks.kategoria_nazwa, GROUP_CONCAT(ks1.kategoria_nazwa) AS podkategorie
  2. FROM `kategorie_stron` AS ks
  3. LEFT JOIN kategorie_stron AS ks1 ON ks.kategoria_id = ks1.kategoria_id_glownej


Powinno zadziałać, pokombinuj tak aby dostać wszystkie dane jakie Cię interesują
sebekzosw
Zwróciło to następująco błąd ;/:

Kod
#1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
zzeus
No tak zapomniałem o grupowaniu

  1. SELECT ks.kategoria_nazwa, GROUP_CONCAT(ks1.kategoria_nazwa) AS podkategorie
  2. FROM `kategorie_stron` AS ks
  3. LEFT JOIN kategorie_stron AS ks1 ON ks.kategoria_id = ks1.kategoria_id_glownej
  4. GROUP BY ks.kategoria_id
sebekzosw
a jak zrobić, aby podkategorie był w tablicy z jakimiś dodatkowymi elementami typu `kategoria_link`??
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.