четверг, 6 мая 2010 г.

UPDATE + JOIN + COUNT() в MySQL

Сегодня столкнулся с проблемой. Данные одной таблицы надо обновить данными тз другой таблицы с учетом статуса в третьей ;-)

Недолго думая написал следующий скрипт:
UPDATE `tags` AS t
LEFT JOIN `auction_tags` AS at ON t.id = at.tag_id
INNER JOIN `auctions` AS a ON a.id = at.auction_id AND a.status = 'active'
SET t.auctions_count = COUNT(at.auction_id)
Не прошло. :-( Оказывается такая конструкция инструкции UPDATE не допускает использование функции COUNT(). После получасового общения с всемирным разумом посредством Google был найден неожиданный вариант выполняющий ту же самую работу:
UPDATE `tags` AS t
SET t.auctions_count = (
SELECT COUNT(at.auction_id)
LEFT JOIN `auction_tags` AS at ON t.id = at.tag_id
INNER JOIN `auctions` AS a ON a.id = at.auction_id AND a.status = 'active'
)
Хм, век живи -век учись...

1 comments:

Анонимный комментирует...

Спасибо