Как одним запросов проапдейтить кол-во товаров в разделах?

Alexos

Новичок
Как одним запросом проапдейтить кол-во товаров в разделах?

Есть 2 таблицы:

Таблица разделов, где count_parts - это как раз поле кол-ва товаров в разделе:
[SQL]
CREATE TABLE `parts_groups` (
`id` int(11) unsigned NOT NULL auto_increment,
`part_name` varchar(255) NOT NULL default '',
`count_parts` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
)
[/SQL]


Таблица связей между товарами и разделами:
[SQL]
CREATE TABLE `links` (
`parts_groups_id` int(11) unsigned NOT NULL default '0',
`item_id` int(11) unsigned NOT NULL default '0'
)
[/SQL]

Чтобы проапдейтить кол-во товаров в разделах пытаюсь выполнить след. запрос:
[SQL]
UPDATE parts_groups SET count_parts = (SELECT count(a.id)
FROM parts_groups as a, links as b
WHERE a.id=b.parts_groups_id
GROUP BY a.id)
[/SQL]
Ответ MySQL:
#1093 - You can't specify target table 'parts_groups' for update in FROM clause

Помогите написать/разобраться в запросе. Работал всё время на 3-й Муське :) Никогда не писал вложенных запросов.
 

zerkms

TDD infected
Команда форума
а зачем тебе за раз устанавливать число товаров в разделе?? может модифицировать это число после непосредственного изменения содержимого раздела?

ps: в подзапросе тебе совершенно не нужно объединение

[sql]
SELECT count(*)
FROM `links`
WHERE `links`.`parts_groups_id` = `parts_groups`.`id`
GROUP BY `links`.`parts_groups_id`
[/sql]
будет вполне достаточно (не проверял)
 

Alexos

Новичок
zerkms
В том то всё и дело, что мне нужно за раз установить число товаров в разделе! Нужно проапдейтить всю базу. Написать с использованием пхп - нет проблем, но вот появилась у меня такая навязка сделать это одним запросом. Вот такая вот задача.

Кстати, если на то пошло, ты забыл включить в запрос выборку по `parts_groups` :)

SELECT count( * )
FROM `links`, `parts_groups`
WHERE `links`.`parts_groups_id` = `parts_groups`.`id`
GROUP BY `links`.`parts_groups_id`
 

zerkms

TDD infected
Команда форума
Alexos
кстати, не забыл.... она тебе там НЕ НУЖНА
 

Alexos

Новичок
zerkms
Кстати, ты прав :)
Спасибо!
Вот правильный запрос:
[SQL]
UPDATE `parts_groups`
SET `parts_groups`.`count_parts` = (
SELECT count( * )
FROM `links`
WHERE `links`.`parts_groups_id` = `parts_groups`.`id`
GROUP BY `links`.`parts_groups_id`
)
[/SQL]

Но Муся моя чуть не легла при количестве записей в таблице links порядка 500 000 :)))
Запрос занял 278.5186 секунд!!! :-O
 

zerkms

TDD infected
Команда форума
Alexos
вот именно поэтому, нужно изменять это поле во время модификации каталога, ибо 1 запрос при изменении контента в принципе погоды не сделает, а подобные - раз в n часов будут на 5 минут почти убивать сервак да ещё и информация в каталоге будет в неактуальном состоянии
 
Сверху