Rozumiem, że próbowałeś naprawić (REPAIR TABLE) obie tabele? Czy przy utworzeniu nowej bazy danych i minimalnym odtworzeniu jej struktury problem też występuje? Ponieważ
-- Zrzut tabeli
CREATE TABLE `cms_announcements` (
`announce_id` int(11) NOT NULL,
`announce_date_relase_count` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `cms_announcements_dates` (
`date_item` int(11) NOT NULL,
`date_start` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `cms_announcements` VALUES(1, 0);
INSERT INTO `cms_announcements` VALUES(2, 0);
INSERT INTO `cms_announcements` VALUES(3, 0);
INSERT INTO `cms_announcements` VALUES(4, 0);
INSERT INTO `cms_announcements` VALUES(5, 0);
INSERT INTO `cms_announcements_dates` VALUES(1, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(1, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(2, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(3, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(3, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(4, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(1, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(2, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(3, '2011-02-16');
INSERT INTO `cms_announcements_dates` VALUES(4, '2011-02-16');
-- Zrzut procedury
DELIMITER $$
CREATE PROCEDURE `AnnouncementsDatesItemsCount`(IN iAnnouncement INT) BEGIN
UPDATE cms_announcements
SET
announce_date_relase_count = (SELECT COUNT(date_start) FROM cms_announcements_dates WHERE date_item = announce_id)
WHERE announce_id = iAnnouncement;
END$$
DELIMITER ;
-- Wywołanie
CALL AnnouncementsDatesItemsCount(2);
W efekcie wartość kolumny
announce_date_relase_count została poprawnie zaktualizowana dla ogłoszenia #2.
Tak więc jeżeli chodzi o sam kod SQL wszystko wydaje się być w porządku.