|
|
|
| Есть запрос вида
UPDATE `products` SET `products_price` = 538.43 where products_id=28395 limit 1;
|
как узнать успешно он выполнился или нет, и если не успешно узнать причину, так как данного products_id модет не быть в БД.
Заранее благодарен. | |
|
|
|
|
|
|
|
для: dima_s_d_s
(18.12.2008 в 07:09)
| |
<?
mysql_query('UPDATE `products` SET `products_price` = 538.43 where products_id=28395 limit 1');
if(mysql_affected_rows() > 0)
echo '=) оууу, кул!';
else
echo '=( оу, щет!';
?>
|
| |
|
|
|
|
|
|
|
для: а-я
(18.12.2008 в 10:40)
| | попробуйте дважды выполнить этот код.... будете сильно удивлены.
автору: для достижения поставленной цели существует запрос SELECT. | |
|
|
|
|
|
|
|
для: Trianon
(18.12.2008 в 10:48)
| | Если испозовать SELECT и делать проверку для каждого ID, что нужно обновить, а их более 10000, то получается большая нагрузка на БД.
Я думал по результатам обновления, сделать два действия, выбрать те которые обновились и те которых нет в БД. | |
|
|
|
|
|
|
|
для: dima_s_d_s
(18.12.2008 в 14:41)
| | если вы собираетесь делать 10000 запросов на обновление вместо двух-четырех, которыми можно обойтись для решения этой задачи, нагрузка все равно будет запредельная. | |
|
|
|
|
|
|
|
для: Trianon
(18.12.2008 в 14:48)
| | Как понять двух четырёх которыми можно обойтись, можно подробнее? | |
|
|
|
|
|
|
|
для: dima_s_d_s
(18.12.2008 в 20:19)
| | я не вижу Вашего кода.
Какие могут быть подробности на пустом месте? | |
|
|
|
|
|
|
|
для: Trianon
(18.12.2008 в 23:01)
| | Суть во в чем, есть в БД товар, кол. которого более 11000.
Обновление должно происходить по ID продукта, в основном меняется его цена. Но если этого ID в базе нет нужно или добавить его в БД или сохранить его в отдельный список для вывода пользователю, мол следующих ID нет в БД.
Я думал реализовать это все средствами UPDATE но так и не нашел как узнать прошло обновление или нет, чтоб выяснить какого товара нет в БД. | |
|
|
|
|
|
|
|
|
для: Trianon
(20.12.2008 в 15:14)
| | Получается что
INSERT INTO table VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3;
|
Данный код, будет записывать значение в бд, но если ему встретится ID=1 тоесть дубликат, он выполнит обновление вместо вставки, я верно всё понял? | |
|
|
|
|
|
|
|
для: dima_s_d_s
(20.12.2008 в 19:54)
| | >Данный код, будет записывать значение в бд, но если ему встретится ID=1 тоесть дубликат, он выполнит обновление вместо вставки, я верно всё понял?
нет. если ему встретится дубликат, то полю с в старой записи будет присвоено значение 3. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2008 в 20:43)
| | Не совсем понятно, дубликат по ID
Допустим
INSERT INTO `products` (`products_id`, `products_model`, `products_price`) values (31301, AWADH4850DOBOX,497.02)
ON DUPLICATE KEY UPDATE `products` SET `products_price` = 497.02 where products_id=31301 limit 1;
|
Как будет работать данная конструкция? | |
|
|
|
|
|
|
|
для: dima_s_d_s
(20.12.2008 в 20:49)
| | обожежмой. Откуда Вы взяли такой синтаксис?
Там такого и рядом не лежало. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2008 в 21:03)
| | Причем здесь, лежало или не лежало.
Кто в курсе как будет работать данная конструкция? | |
|
|
|
|
|
|
|
для: dima_s_d_s
(20.12.2008 в 21:10)
| | такая конструкция не будет работать никак. Потому что нарушает синтаксис языка.
INSERT INTO goods (barcode, name, price) VALUES
('6936614700897', 'Желтый полосатик, рыбка Дальпик', 79.90),
('4602547000206', 'Крем сливочный 15% Пискаревский', 22.20),
('4600687003750', 'Ситро Экстра, лимонад 2л.', 49.90)
ON DUPLICATE KEY UPDATE name=VALUES(name), price=VALUES(price);
|
| |
|
|
|
|
|
|
|
для: Trianon
(20.12.2008 в 21:12)
| | В каком случаи будет вставка а в каком обновление?
И как понять это UPDATE name=VALUES(name), price=VALUES(price); ? | |
|
|
|
|
|
|
|
для: dima_s_d_s
(20.12.2008 в 21:31)
| | в мануале всё написано. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2008 в 21:55)
| | Лдано, понятно. Вы как те преподы что учат по учебнику, боятся отойти от темы хоть немного в сторону, так как сами не понимают о чем идет речь.
вот рабочий пример
INSERT INTO `products` (`products_id`, `products_model`, `products_price`) values (31301, 'AWADH4850DOBOX',497.02)
ON DUPLICATE KEY UPDATE `products_price` = 497.02;
|
| |
|
|
|
|
|
|
|
для: dima_s_d_s
(20.12.2008 в 21:59)
| | Я как раз отошел немного в сторону. Чтобы Вы смогли подумать головой, а не броситься списывать тут же с форума на сайт.
А Ваш пример нерабочий хотя бы потому, что не дает одним оператором загнать сразу несколько товаров. Если конечно у них цена разная, а не только 497.02 | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2008 в 22:10)
| | Увы, по мойму одним оператором тут не обойтись | |
|
|
|
|
|
|
|
для: dima_s_d_s
(20.12.2008 в 22:18)
| | вводим в таблицу поле seq , с умалчиваемым значением 1
INSERT INTO goods (barcode, name, price) VALUES
('6936614700897', 'Желтый полосатик, рыбка Дальпик', 79.90),
('4602547000206', 'Крем сливочный 15% Пискаревский', 22.20),
('4600687003750', 'Ситро Экстра, лимонад 2л.', 49.90)
ON DUPLICATE KEY UPDATE name=VALUES(name), price=VALUES(price), seq=seq+1;
|
для вновь заводимых записей поле окажется заполненным по умолчанию.
Для обновленных - увеличится на единичку.
SELECT id FROM goods WHERE seq = 1 покажет свежие записи.
Если присвоить в последнем выражении запроса константу, а не выражение, точно также просто можно будет получить ключи обновленных записей.
Всё решается. Если пытаться решать, а не списывать в лоб. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2008 в 22:29)
| | Я не знал что когда мы пишем , price=VALUES(price), значемние , VALUES(price) будет соответствовать нашему значению с INSERT.
А так прикольно, всё работает.
Спасибо за помощь. | |
|
|
|