|
|
|
| Добрый день!
Вопрос, может, простой, но никак не дойду как сделать. Излагаю в упрощённой форме:
Есть две таблицы:
1) users. Поля:
user_id, posts_num
2) posts. Поля:
post_id, owner, body
Поле owner - ссылка на автора поста (users.user_id).
Как одним запросом можно прописать в users.posts_num для всех юзеров суммарное кол-во постов каждого юзера?
Заранее спасибо! | |
|
|
|
|
|
|
|
для: torbik
(27.07.2009 в 11:05)
| | сперва нужно сформировать соответствующий SELECT запрос.
после этого UPDATE строится на раз. | |
|
|
|
|
|
|
|
для: Trianon
(27.07.2009 в 13:11)
| | И всё-таки как?
Никто не знает? | |
|
|
|
|
|
|
|
для: torbik
(27.07.2009 в 11:05)
| | чет ничего в голову не приходит...
UPDATE
`users` a
SET
a.`num` = (SELECT count(*) FROM `posts` b WHERE b.`owner` = a.`user_id`)
|
| |
|
|
|
|
|
|
|
для: а-я
(27.07.2009 в 17:35)
| |
UPDATE users
FROM users
JOIN
(
SELECT owner, count(*) AS cnt
FROM `posts`
GROUP BY owner
) As t ON owner=user_id
SET a.num = cnt;
|
| |
|
|
|
|
|
|
|
для: Trianon
(27.07.2009 в 18:50)
| | Спасибо большое!
ЗЫ. Первый вариант работает, но мне не подходит, т.к. перелопачивает всех юзеров, а мне нужно только отобранных по определённому критерию. | |
|
|
|
|
|
|
|
для: torbik
(28.07.2009 в 14:13)
| | А что мешало в Вашем варианте добавить WHERE к запросу UPDATE? | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 14:20)
| | Тогда бы WHERE в UPDATE'е и SELECTE'е сильно пересекались. Там сложное выражение, в котором учавствуют несколько таблиц. Получается оно бы вычислялось по два раза. | |
|
|
|