Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Можно ли определить сколько полей обновлено?


Автор: Elfet 7.2.2008, 17:16
Можно ли определить сколько полей обновлено?
Код

$q = mysql_query("UPDATE elfchat_users SET time = '".$time."' WHERE mid = '".$mid."' LIMIT 1"); 

Автор: Elfet 7.2.2008, 17:35
Нужно что-то вроде этого?
Код

$q = mysql_query("SELECT * TABLE elfchat_users WHERE mid = '".$mid."' LIMIT 1; UPDATE elfchat_users SET time = '".$time."' WHERE mid = '".$mid."' LIMIT 1");

Автор: GeneralElectric 7.2.2008, 17:37
одно

Автор: Elfet 7.2.2008, 17:42
Цитата(GeneralElectric @ 7.2.2008,  18:37)
одно

А если там нету полей с таким же mid?

Автор: skyboy 7.2.2008, 17:44
в общем виде - используя http://ua.php.net/mysql_affected_rows.
GeneralElectric, ответ очень емок, но мне кажется, не учтена возможность, что условие WHERE ни одна запись не удовлетворит. И тогда результат будет - 0. Так что "0 или 1" - наиболее полный ответ.

Автор: Elfet 7.2.2008, 17:53
Блин smile
Цитата

When using UPDATE, MySQL will not update columns where the new value is the same as the old value. This creates the possibility that mysql_affected_rows() may not actually equal the number of rows matched, only the number of rows that were literally affected by the query.

Мне это не подходит smile

Как можно объеденить SELECT c UPDATE?

Автор: GeneralElectric 7.2.2008, 17:55
Может быть, лучше озвучить задачу, для которой это требуется?

Автор: Elfet 7.2.2008, 18:09
Обновить поле и проверить ест ли вообще такое поле. Не хочу два запроса:
Код

        mysql_query("UPDATE mytab SET time = '".$time."' WHERE mid = '".$mid."' LIMIT 1"); 
        $q = mysql_query("SELECT * FROM mytab WHERE mid = '".$mid."' LIMIT 1");
        if(mysql_num_rows($q) == 1)    
            return true;
        else    
            return false;

Автор: gta4kv 7.2.2008, 18:13
Код

UPDATE mytab f1, mytab2 f2 SET f1.time = '".$time."' WHERE f1.mid = '".$mid."' and f2.mid = f1.mid LIMIT 1


Может так? Хотя я не совсем понял задачу.

или 

Код

UPDATE mytab SET time = '666' WHERE mid = (SELECT * FROM mytab WHERE mid = '30' LIMIT 1) LIMIT 1


Автор: Elfet 7.2.2008, 18:23
Цитата(gta4kv @  7.2.2008,  19:13 Найти цитируемый пост)
UPDATE mytab SET time = '666' WHERE mid = (SELECT * FROM mytab WHERE mid = '30' LIMIT 1) LIMIT 1

А что вот от сюда вернёт mysql_num_rows($q)?

Автор: gta4kv 7.2.2008, 18:26
Цитата(Elfet @ 7.2.2008,  18:23)
Цитата(gta4kv @  7.2.2008,  19:13 Найти цитируемый пост)
UPDATE mytab SET time = '666' WHERE mid = (SELECT * FROM mytab WHERE mid = '30' LIMIT 1) LIMIT 1

А что вот от сюда вернёт mysql_num_rows($q)?

да... и вправду, что)

Добавлено @ 18:29
хотя, помойму если выполниться апдейт должно вернуться что-то типа true от сервера, а если mid'a нету - то и апдейт не выполниться ) ну и значит вернется false, хотя я чувствую что это скорее бред)

и вообще изначально вопрос звучал как:
Цитата

Как можно объеденить SELECT c UPDATE? 


а щас уже что-то не то %)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)