помогите с запросом массового update
От: rav  
Дата: 21.06.11 08:58
Оценка:
БД mysql 4.0
имеются таблицы посещений конкретных страниц (pageid) по месяцам
month1 (id,pageid,visits,date) — таблица по датам за 1 месяц
month2 (id,pageid,visits,date) — таблица по датам за 2 месяц
CREATE TABLE `month1` (
    `id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
    `pageid` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
    `visits` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
    `datevisit` DATE NOT NULL DEFAULT '0000-00-00',
    PRIMARY KEY (`id`),
    INDEX `pageid` (`pageid`),
    INDEX `datevisit` (`datevisit`)
)
CREATE TABLE `month2` (
    `id` INT(12) UNSIGNED NOT NULL AUTO_INCREMENT,
    `pageid` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
    `visits` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
    `datevisit` DATE NOT NULL DEFAULT '0000-00-00',
    PRIMARY KEY (`id`),
    INDEX `pageid` (`pageid`),
    INDEX `datevisit` (`datevisit`)
)

требуется создать
year1 (id,pageid,month1,month2) — суммарная статистика по месяцам
в итоговую таблицу year1 собрать сумму визитов по месяцам и записать в поля month1, month2
CREATE TABLE `year1` (
    `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
    `pageid` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID SRT',
    `m1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'январь',
    `m2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'февраль',
    PRIMARY KEY (`id`),
    INDEX `pageid` (`pageid`)
)


пробую такой запрос
INSERT INTO year1 (pageid,month1)
SELECT pageid, SUM(visits) as visits FROM month1 GROUP BY pageid;

UPDATE year1 as t1
SET t1.month2 = t2.visitsum
FROM (SELECT SUM(visits) as visitsum FROM month2 GROUP BY pageid) AS t2
WHERE (t2.pageid = t1.pageid)


insert проходит, но на update получаю ошибку
/* 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 */

подскажите, что не так ? или есть более оптимальный способ решения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.