Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Странное поведение UPDATE
Когда скрипт их выполняет почему-то строки отобранные по WHERE становятся абсолютно одинаковыми. Такое впечатление что в 2-ом UPDATE условие WHERE просто игнорируется.
Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
Viper пишет:
В чем затык?
Чисто для себя хочу уточнить, а какой тип поля cd_line_adr?
EuGen
Отправлено: 10 Октября, 2011 - 17:30:17
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Этими двумя запросами Вы обновите одну и ту же строку - как минимум, а так же все те, что попадают под второе условие - как максимум.
Первым запросом Вы обновляете в числе прочего
`cd_line_adr` = '1.470'
а во втором запросе Вы обновляете все, где
WHERE `cd_line_adr` = '1.470'
- стало быть, если первый запрос исполняется раньше второго, оба затронут одну и ту же строку по очереди (и второй, вероятно, затронет еще какие-либо строки).
Да, кстати, не заключайте значения для целочисленных и вещественных значений в кавычки - лишняя работа для БД получается.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Champion
Отправлено: 10 Октября, 2011 - 18:00:18
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
EuGen пишет:
если первый запрос исполняется раньше первого
Думаю, такое не часто случается) А вот первый раньше второго - весьма вероятно)
Viper
Отправлено: 11 Октября, 2011 - 07:26:15
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
IronHawk пишет:
а какой тип поля cd_line_adr?
VARCHAR(12)
EuGen пишет:
Да, кстати, не заключайте значения для целочисленных и вещественных значений в кавычки - лишняя работа для БД получается.
т.е. 1.5548974 можно в кавычки не заключать?
EuGen пишет:
Этими двумя запросами Вы обновите одну и ту же строку - как минимум, а так же все те, что попадают под второе условие - как максимум.
все. уже увидел. Щас попробую исправить. Тупеж полный чет у меня.
Попутно спрошу про поиск по таким данным. Нужны ли индексы для всех приведенных колонок если в базе может быть несколько млн. строк и поиск ведется одновременно по всем столбцам?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Champion
И то верно.
Viper пишет:
т.е. 1.5548974 можно в кавычки не заключать?
Я бы сказал даже - нужно не заключать
Viper пишет:
Нужны ли индексы для всех приведенных колонок
Только по тем колонкам, данные для которых дискретны и индекс по которым будет иметь приемлимую мощность множества значений ключа (т.н. cardinality)
Скажем, по INT, CHAR, DATE и ENUM - полям индекс построится в большинстве случаев хороший, по VARCHAR - тоже хороший, но еще лучше если его (индекса) длину ограничить, а вот для DATETIME, TIMESTAMP или тем более FLOAT/DOUBLE полей индекс будет не только бесполезен, но скорее всего и вреден.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.