Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Использование COUNT в UPDATE
 
 автор: torbik   (27.07.2009 в 11:05)   письмо автору
 
 

Добрый день!

Вопрос, может, простой, но никак не дойду как сделать. Излагаю в упрощённой форме:

Есть две таблицы:

1) users. Поля:
user_id, posts_num

2) posts. Поля:
post_id, owner, body

Поле owner - ссылка на автора поста (users.user_id).

Как одним запросом можно прописать в users.posts_num для всех юзеров суммарное кол-во постов каждого юзера?

Заранее спасибо!

  Ответить  
 
 автор: Trianon   (27.07.2009 в 13:11)   письмо автору
 
   для: torbik   (27.07.2009 в 11:05)
 

сперва нужно сформировать соответствующий SELECT запрос.
после этого UPDATE строится на раз.

  Ответить  
 
 автор: torbik   (27.07.2009 в 17:12)   письмо автору
 
   для: Trianon   (27.07.2009 в 13:11)
 

И всё-таки как?
Никто не знает?

  Ответить  
 
 автор: а-я   (27.07.2009 в 17:35)   письмо автору
 
   для: torbik   (27.07.2009 в 11:05)
 

чет ничего в голову не приходит...

UPDATE 
 `users` a 
SET 
 a.`num` = (SELECT count(*) FROM `posts` b WHERE b.`owner` = a.`user_id`)

  Ответить  
 
 автор: Trianon   (27.07.2009 в 18:50)   письмо автору
 
   для: а-я   (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;

  Ответить  
 
 автор: torbik   (28.07.2009 в 14:13)   письмо автору
 
   для: Trianon   (27.07.2009 в 18:50)
 

Спасибо большое!

ЗЫ. Первый вариант работает, но мне не подходит, т.к. перелопачивает всех юзеров, а мне нужно только отобранных по определённому критерию.

  Ответить  
 
 автор: Trianon   (28.07.2009 в 14:20)   письмо автору
 
   для: torbik   (28.07.2009 в 14:13)
 

А что мешало в Вашем варианте добавить WHERE к запросу UPDATE?

  Ответить  
 
 автор: torbik   (29.07.2009 в 11:36)   письмо автору
 
   для: Trianon   (28.07.2009 в 14:20)
 

Тогда бы WHERE в UPDATE'е и SELECTE'е сильно пересекались. Там сложное выражение, в котором учавствуют несколько таблиц. Получается оно бы вычислялось по два раза.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования