Здравствуйте, rav, Вы писали:
rav>БД mysql 4.0
rav>имеются таблицы посещений конкретных страниц (pageid) по месяцам
rav>month1 (id,pageid,visits,date) — таблица по датам за 1 месяц
rav>month2 (id,pageid,visits,date) — таблица по датам за 2 месяц
rav>rav>CREATE TABLE `month1` (
rav> `id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
rav> `pageid` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
rav> `visits` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
rav> `datevisit` DATE NOT NULL DEFAULT '0000-00-00',
rav> PRIMARY KEY (`id`),
rav> INDEX `pageid` (`pageid`),
rav> INDEX `datevisit` (`datevisit`)
rav>)
rav>CREATE TABLE `month2` (
rav> `id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
rav> `pageid` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
rav> `visits` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
rav> `datevisit` DATE NOT NULL DEFAULT '0000-00-00',
rav> PRIMARY KEY (`id`),
rav> INDEX `pageid` (`pageid`),
rav> INDEX `datevisit` (`datevisit`)
rav>)
rav>
rav>требуется создать
rav>year1 (id,pageid,month1,month2) — суммарная статистика по месяцам
rav>в итоговую таблицу year1 собрать сумму визитов по месяцам и записать в поля month1, month2
rav>rav>CREATE TABLE `year1` (
rav> `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
rav> `pageid` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID SRT',
rav> `m1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'январь',
rav> `m2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'февраль',
rav> PRIMARY KEY (`id`),
rav> INDEX `pageid` (`pageid`)
rav>)
rav>
rav>пробую такой запрос
rav>rav>INSERT INTO year1 (pageid,month1)
rav>SELECT pageid, SUM(visits) as visits FROM month1 GROUP BY pageid;
rav>UPDATE year1 as t1
rav>SET t1.month2 = t2.visitsum
rav>FROM (SELECT SUM(visits) as visitsum FROM month2 GROUP BY pageid) AS t2
rav>WHERE (t2.pageid = t1.pageid)
rav>
rav>insert проходит, но на update получаю ошибку
rav>/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (SELECT SUM(visits) as visitsum FROM month2 GROUP' at line 3 */
rav>подскажите, что не так ? или есть более оптимальный способ решения?
А если перекрутить итоговую таблицу вот так
CREATE TABLE YearSumm
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
Month INT NOT NULL,
PageID INT NOT NULL,
CountVisits INT NOT NULL
)
А потом
INSERT YearSumm(Month,PageID,CountVisits)
SELECT 1,PageID,SUM(Visits) FROM Month1 GROUP BY PageID
UNION ALL
SELECT 2,PageID,SUM(Visits) FROM Month1 GROUP BY PageID