Mam dwie tabele pierwsza zawiera komunikaty:
CREATE TABLE `messages` ( `id` int(3) UNSIGNED NOT NULL AUTO_INCREMENT, `date` datetime DEFAULT NULL, `author` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `sender` varchar(255) CHARACTER SET utf8 DEFAULT '', `customer` text CHARACTER SET utf8, `start_date` date DEFAULT '0000-00-00', `end_date` date DEFAULT '0000-00-00', `theme` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `content` longtext CHARACTER SET utf8, `guid` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci ROW_FORMAT=DYNAMIC;
druga zbiera wszystkie operacje wykonywane przez zalogowanych:
CREATE TABLE `log` ( `Id` int(6) NOT NULL AUTO_INCREMENT, `date` datetime DEFAULT NULL, `applicant` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `operation` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL, `description` longtext COLLATE utf8_polish_ci, `ip` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL, `netbios` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL, `agent` text COLLATE utf8_polish_ci, `url` text COLLATE utf8_polish_ci, `guid` varchar(255) CHARACTER SET utf8 DEFAULT NULL, PRIMARY KEY (`Id`) ) 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:
SELECT Count(DISTINCT `log`.`guid`) FROM `messages` RIGHT JOIN `log` ON `messages`.`guid` = `log`.`guid` WHERE `log`.`operation` = 'Odczytano komunikat' AND `messages`.`sender` = 'Administracja informatyka' AND `messages`.`customer` = 'Administracja BHP' GROUP BY `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.