Re: помогите с запросом массового update
От: londinium Украина  
Дата: 21.06.11 10:14
Оценка: -1
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.