Witam mam tabele zdjęcia w której jest klucz obcy do kolumny z tabeli folder. Chciałbym wyświetlić dane dotyczące folderów należących do danego usera: dane folderu, ilość plików z nim powiązanych oraz ich wagą. Moje próby wyglądają następująco:

  1. SELECT *, (SELECT COUNT(id) AS x FROM zdjecia z WHERE folder_dir = k.id) AS ile, (SELECT SUM(rozmiar) AS x FROM zdjecia z WHERE folder_dir = k.id) AS rozmiar
  2. FROM katalogi k WHERE k.id_uzytkownik = 1;


  1. SELECT k.*, folder_dir,COUNT(z.id) AS x, sum(z.rozmiar) AS y FROM zdjecia z INNER JOIN katalogi k ON k.id = z.folder_dir WHERE NOT folder_dir IS NULL AND z.id_uzytkownik = 1 GROUP BY folder_dir;





  1. CREATE TABLE IF NOT EXISTS `zdjecia` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `nazwa` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  4. `data_dodania` datetime NOT NULL,
  5. `opis` varchar(400) COLLATE utf8_unicode_ci DEFAULT NULL,
  6. `folder_dir` int(10) UNSIGNED DEFAULT NULL,
  7. `glosy` int(10) UNSIGNED NOT NULL,
  8. `ilosc_glosow` int(10) UNSIGNED NOT NULL,
  9. `id_kategoria` int(10) UNSIGNED NOT NULL,
  10. `nazwa_url` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  11. `rozmiar` int(10) UNSIGNED NOT NULL,
  12. `id_uzytkownik` int(10) UNSIGNED NOT NULL,
  13. `rozdzielczosc` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  14. PRIMARY KEY (`id`),
  15. KEY `FK_zdjeca_1` (`id_kategoria`) USING BTREE,
  16. KEY `FK_zdjecia_2` (`id_uzytkownik`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


  1. CREATE TABLE IF NOT EXISTS `katalogi` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `nazwa` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  4. `nazwa_url` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  5. `id_uzytkownik` int(10) UNSIGNED NOT NULL,
  6. `data` datetime NOT NULL,
  7. PRIMARY KEY (`id`),
  8. KEY `FK_katalogi_1` (`id_uzytkownik`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=19 ;


Z obu rozwiązań nie jestem zadowolony. Pewnie da się to zrobić lepiej. Z góry dzięki za odpowiedzi