Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zliczanie wystąpień pewnej operacji
Forum PHP.pl > Forum > Bazy danych
tomekn
Witam,

Mam dwie tabele pierwsza zawiera komunikaty:

  1. CREATE TABLE `messages` (
  2. `id` int(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `date` datetime DEFAULT NULL,
  4. `author` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  5. `sender` varchar(255) CHARACTER SET utf8 DEFAULT '',
  6. `customer` text CHARACTER SET utf8,
  7. `start_date` date DEFAULT '0000-00-00',
  8. `end_date` date DEFAULT '0000-00-00',
  9. `theme` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  10. `content` longtext CHARACTER SET utf8,
  11. `guid` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
  12. PRIMARY KEY (`id`)
  13. ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci ROW_FORMAT=DYNAMIC;


druga zbiera wszystkie operacje wykonywane przez zalogowanych:

  1. CREATE TABLE `log` (
  2. `Id` int(6) NOT NULL AUTO_INCREMENT,
  3. `date` datetime DEFAULT NULL,
  4. `applicant` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  5. `operation` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL,
  6. `description` longtext COLLATE utf8_polish_ci,
  7. `ip` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL,
  8. `netbios` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL,
  9. `agent` text COLLATE utf8_polish_ci,
  10. `url` text COLLATE utf8_polish_ci,
  11. `guid` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  12. PRIMARY KEY (`Id`)
  13. ) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


Jedną z zapisywanych wartości w tabeli log jest informacja, że dany komunikat został odczytany.

Mój problem polega na tym, że nie mogę prawidłowo zliczyć ile razy komunikaty wysłane przez dany dział w firmie np.: `messages`.`sender` = 'Administracja informatyka' zostały odczytany przez inny dział np.: `messages`.`customer` = 'Administracja BHP'

Moje zapytanie:

  1. SELECT
  2. Count(DISTINCT `log`.`guid`)
  3. FROM
  4. `messages`
  5. RIGHT JOIN `log` ON `messages`.`guid` = `log`.`guid`
  6. WHERE
  7. `log`.`operation` = 'Odczytano komunikat' AND
  8. `messages`.`sender` = 'Administracja informatyka' AND
  9. `messages`.`customer` = 'Administracja BHP'
  10. GROUP BY
  11. `log`.`applicant`;


Jak można się domyślić w tabeli log odczyt danego komunikatu może występować wielokrotnie.
Zależy mi na tym aby pokazywać zalogowanej osobie ile ma nieprzeczytanych komunikatów z wszystkich dostępnych dlatego potrzebne jest wybieranie z tabeli log tylko pojedynczego wystąpienia.

Dziękuję za pomoc w rozwiązaniu problemu.
ghost1511
Spróbuj zrobić to podzapytaniem. Czyli najpierw pogrupuj w logu odczytanie wiadomości i złącz to z tabelą messages.
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.