|
|
|
| подскажите, я хочу обновить поля вот так
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 не тронет? И почему так происходит.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: FaStY
(11.07.2009 в 17:43)
| | И почему так происходит.
100% потому что Вы что-то неправильно делаете.
Давайте структуру таблицы и типы полей.
___
кстати почему не тронет если вы присваиваете 2 полю которое уже содержит 2? | |
|
|
|
|
|
|
|
для: 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; | |
|
|
|
|
|
|
|
для: Valick
(11.07.2009 в 23:30)
| | ->кстати почему не тронет если вы присваиваете 2 полю которое уже содержит 2?
в смысле? я вот и спрашиваю, у меня в программе navicat for mysql если поле уже содержит 2 - и я пытаюсь это поле обновить на 2, тогда оно не обновляет. | |
|
|
|
|
|
|
|
для: 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 же. Если правильно запрос переписать, конечно. | |
|
|
|
|
|
|
|
для: ю
(11.07.2009 в 23:46)
| | а три почему? | |
|
|
|
|
автор: . (12.07.2009 в 00:20) |
|
|
для: Trianon
(11.07.2009 в 23:58)
| | Потому что если до и после обновления строки данные в ней никак не изменились, что это не считается affected row | |
|
|
|
|
|
|
|
для: .
(12.07.2009 в 00:20)
| | Если в результате выполнения оператора обновления строки данные в ней никак не изменились, что это не считается affected row.
Верно, но только таких строк в таблице по исходному условию было пять. А не три. Если закрыть глаза на синтаксис запроса. | |
|
|
|
|
автор: . (12.07.2009 в 17:44) |
|
|
для: Trianon
(12.07.2009 в 09:22)
| | Автор же сказал, что у него три строки с status = 3, а две с status = 2. | |
|
|
|
|
|
|
|
для: .
(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 ставится. | |
|
|
|
|
|
|
|
для: FaStY
(11.07.2009 в 17:43)
| | Разве это плохо?
"Если столбец устанавливается в его текущее значение, то MySQL замечает это и не обновляет его. "
взято отсюда
PS А у вас этот запрос выполняется(я говорю о синтаксисе WHERE)? | |
|
|
|
|
|
|
|
для: ride
(12.07.2009 в 10:27)
| | это хорошо, спасибо за ответ
На быструю руки писал, конечно where не выполняеться) | |
|
|
|