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

Форум MySQL

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

 

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

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

тема: UPDATE ... SELECT
 
 автор: _Dreamer_   (27.11.2006 в 10:45)   письмо автору
 
 

у меня есть табличка ref с ПК code мне туда нужно добавить поле ref_count... добавил: ref_count INT(6) DEFAULT 0..
Есть другая табличка ref_stat с ВК code..
можно мне в табличке ref одним запросом установить значение поля ref_count как число записей в табличке ref_stat -- что то вроде этого SELECT count(*) FROM ref_stat WHERE ref_stat.code = ref.code?
Подскажите пожалуйста как это сделать? Или придется написать всё таки небольшорй скрипт который это все будет делать для каждой записи отдельно?

   
 
 автор: Trianon   (27.11.2006 в 11:07)   письмо автору
 
   для: _Dreamer_   (27.11.2006 в 10:45)
 

Сделать-то можно... да только ничего, кроме вреда, это не принесет.

UPDATE ref JOIN 
   (SELECT code, COUNT(*) AS cnt
     FROM ref JOIN ref_stat USING ( code ) 
       GROUP BY (code)
   ) AS t2
 USING ( code ) 
SET ref.ref_count = cnt

   
 
 автор: _Dreamer_   (27.11.2006 в 11:19)   письмо автору
 
   для: Trianon   (27.11.2006 в 11:07)
 

Наверно для MySQL такое объединение не катит... у меня пишет

You have an error in your SQL syntax near 'INNER JOIN (SELECT code, COUNT(*) AS cnt FROM ref JOIN ref_stat USING ( ' at line 1


но я уже всё таки решил сделать маленький скрипт...

    $result = mysql_query("SELECT code FROM ref_stat GROUP BY code");
    while ($row = mysql_fetch_row($result))
    {
        list($code) = $row;
        list($ref_hits) = mysql_fetch_row(mysql_query("SELECT count(*) FROM ref_stat WHERE code = '$code'"));
        mysql_query("UPDATE ref SET ref_hits = $ref_hits");
    }


просто если в табличке было не тысяча другая записей, нужно было бы всякие LIMIT использовать и переадресацию на этот скрипт делать, потому что 30 сек. не хватило бы

   
 
 автор: AlexelA   (27.11.2006 в 11:38)   письмо автору
 
   для: _Dreamer_   (27.11.2006 в 10:45)
 

Попробуйте так:
update ref set ref_count =
(select count(*) from ref_stat where ref.code = ref_stat.code);

   
 
 автор: _Dreamer_   (27.11.2006 в 11:48)   письмо автору
 
   для: AlexelA   (27.11.2006 в 11:38)
 

Спасибо, но так тоже не получается...

You have an error in your SQL syntax near SELECT....

В принципе для меня это уже не проблема -- использовал другое решение, просто интересно можно ли вообще так делать, было бы не плохо если да :)

   
 
 автор: AlexelA   (27.11.2006 в 11:52)   письмо автору
 
   для: _Dreamer_   (27.11.2006 в 11:48)
 

Странно, но на MySQL 5.0.15 все работает без ошибок

   
 
 автор: _Dreamer_   (27.11.2006 в 11:55)   письмо автору
 
   для: AlexelA   (27.11.2006 в 11:52)
 

ок, буду знать и как будет время поменяю у себя на локальном mysql - поставлю поновее

   
Rambler's Top100
вверх

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