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

Форум MySQL

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

 

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

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

тема: вопрос про Update
 
 автор: FaStY   (11.07.2009 в 17:43)   письмо автору
 
 

подскажите, я хочу обновить поля вот так
Update table SET status = 2 WHERE user_id=1, group_id = 1, game_id = 1

если у меня например есть 5 записей, у которых user_id=1, group_id = 1, game_id = 1 и status = 3
и 2 записи, где user_id=1, group_id = 1, game_id = 1 и status = 2
У меня мускуль обновит только 5 записей, где status = 3, а те 2 записи, где status = 2 не тронет? И почему так происходит.
Заранее спасибо.

  Ответить  
 
 автор: Valick   (11.07.2009 в 23:30)   письмо автору
 
   для: FaStY   (11.07.2009 в 17:43)
 

И почему так происходит.
100% потому что Вы что-то неправильно делаете.
Давайте структуру таблицы и типы полей.
___
кстати почему не тронет если вы присваиваете 2 полю которое уже содержит 2?

  Ответить  
 
 автор: FaStY   (11.07.2009 в 23:34)   письмо автору
 
   для: Valick   (11.07.2009 в 23:30)
 

CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`game_id` int(5) DEFAULT NULL,
`dt_created` int(10) NOT NULL,
`status` int(2) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `table_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `group` (`id`) ON UPDATE SET NULL ON DELETE SET NULL,
CONSTRAINT `table_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE SET NULL ON DELETE SET NULL,
CONSTRAINT `table_ibfk_3` FOREIGN KEY (`game_id`) REFERENCES `game` (`id`) ON UPDATE SET NULL ON DELETE SET NULL,
UNIQUE `id`(id),
INDEX `group_id`(lot_id),
INDEX `user_id`(user_id),
INDEX `game_id`(bet_type_id)
) ENGINE=`InnoDB` AUTO_INCREMENT=29 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=COMPACT CHECKSUM=0 DELAY_KEY_WRITE=0;

  Ответить  
 
 автор: FaStY   (11.07.2009 в 23:36)   письмо автору
 
   для: Valick   (11.07.2009 в 23:30)
 

->кстати почему не тронет если вы присваиваете 2 полю которое уже содержит 2?
в смысле? я вот и спрашиваю, у меня в программе navicat for mysql если поле уже содержит 2 - и я пытаюсь это поле обновить на 2, тогда оно не обновляет.

  Ответить  
 
 автор: Trianon   (11.07.2009 в 23:40)   письмо автору
 
   для: Valick   (11.07.2009 в 23:30)
 

>кстати почему не тронет если вы присваиваете 2 полю которое уже содержит 2?

mysql_affected_rows() вернет 5.

  Ответить  
 
 автор: ю   (11.07.2009 в 23:46)
 
   для: Trianon   (11.07.2009 в 23:40)
 

> mysql_affected_rows() вернет 5

Почему? Вернёт 3 же. Если правильно запрос переписать, конечно.

  Ответить  
 
 автор: Trianon   (11.07.2009 в 23:58)   письмо автору
 
   для: ю   (11.07.2009 в 23:46)
 

а три почему?

  Ответить  
 
 автор: .   (12.07.2009 в 00:20)
 
   для: Trianon   (11.07.2009 в 23:58)
 

Потому что если до и после обновления строки данные в ней никак не изменились, что это не считается affected row

  Ответить  
 
 автор: Trianon   (12.07.2009 в 09:22)   письмо автору
 
   для: .   (12.07.2009 в 00:20)
 

Если в результате выполнения оператора обновления строки данные в ней никак не изменились, что это не считается affected row.
Верно, но только таких строк в таблице по исходному условию было пять. А не три. Если закрыть глаза на синтаксис запроса.

  Ответить  
 
 автор: .   (12.07.2009 в 17:44)
 
   для: Trianon   (12.07.2009 в 09:22)
 

Автор же сказал, что у него три строки с status = 3, а две с status = 2.

  Ответить  
 
 автор: FaStY   (12.07.2009 в 18:02)   письмо автору
 
   для: .   (12.07.2009 в 17:44)
 

нет, 5 строк со статус 3, и 2 строки со статус 2 )

  Ответить  
 
 автор: .   (12.07.2009 в 22:18)
 
   для: FaStY   (12.07.2009 в 18:02)
 

да, действительно...

  Ответить  
 
 автор: .   (11.07.2009 в 23:44)
 
   для: FaStY   (11.07.2009 в 17:43)
 

Вы сначала почитайте мануал, посмотрите что после WHERE ставится.

  Ответить  
 
 автор: ride   (12.07.2009 в 10:27)   письмо автору
 
   для: FaStY   (11.07.2009 в 17:43)
 

Разве это плохо?
"Если столбец устанавливается в его текущее значение, то MySQL замечает это и не обновляет его. "
взято отсюда

PS А у вас этот запрос выполняется(я говорю о синтаксисе WHERE)?

  Ответить  
 
 автор: FaStY   (12.07.2009 в 11:39)   письмо автору
 
   для: ride   (12.07.2009 в 10:27)
 

это хорошо, спасибо за ответ
На быструю руки писал, конечно where не выполняеться)

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

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