X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

2 страниц Открыть меню   1 2 >  
Ответить в данную темуНачать новую тему
> MySQL запрос на обновление
termit
сообщение 2012-01-13, 3:08
Сообщение #1
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


Доброго времени суток.

Случился на роботе трабл с мускулом (интернет провайдер, оплата по скретч картам). По моей вине "случайно" испортились данные в одной табличке в одном столбце.
Теперь начальство чуть ли не СБУ мне угрожает если не исправлю (доступ к ssh и db я получил незаконно).

Есть две таблицы:
1. cards (с полями id, code, create_date, used_date)
2. pay_history (с полями id, user, code, pay_date(поле с неправильными датами по моей вине) )

Нужно обновить даные с первой таблицы во вторую соответственно code

Пример:
Первая таблица:
id | code | create_date | used_date
1 | 12345 | 2011-01-01 23:59:59 | 2011-04-02 21:39:12
2 | 12355 | 2011-01-01 23:59:59 | 2011-03-06 10:09:11

Вторая таблица:
id | user | code | pay_date
30 | 233 | 12355 | 0000-00-00 00:00:00
31 | 122 | 12345 | 0000-00-00 00:00:00

После запроса должны получить
Вторая таблица:

id | user | code | pay_date
30 | 233 | 12355 | 2011-03-06 10:09:11
31 | 122 | 12345 | 2011-04-02 21:39:12

[b]Тоесть чтобы при совпадении кодов дата изменилась на правильную.[/b]

Помогите плиз... :blush2:

Сообщение отредактировал termit - 2012-01-13, 3:16
Перейти в начало страницы
+Цитировать сообщение
Djadka
сообщение 2012-01-13, 13:20
Сообщение #2
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 463
Регистрация: 2010-10-17

Репутация:   нет  
Всего: нет


В таких случаях пользуюсь ETL устройством Pentaho мощная штука. Хотя мне кажется в таком случае проще будет через пхп. Вынимаем код и дату одним запросом. Потом через цикл идём и вставляем данные
'UPDATE `вторую таблицу`
SET `pay_date`=Данные из первого запроса
WHERE `code`= code из первого запроса
может ошибаюсь а скорую руку подумал
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-01-13, 15:32
Сообщение #3
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


Спасибо, за совет, совсем забыл про php)
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2012-01-13, 16:07
Сообщение #4
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (termit @ 2020-10-27 04:42)
Спасибо, за совет, совсем забыл про php)

Забыл??? :blink: :blink: :blink:
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-01-13, 22:30
Сообщение #5
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


В том смысле что работал напрямую с мускулом, через ssh, все скрипты на перле(который я плохо знаю). B)
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2012-01-13, 22:53
Сообщение #6
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


UPDATE `t1`,`t2` SET `t2`.`pay_date`=`t1`.`used_date` WHERE `t1`.`code`=`t2`.`code`
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-01-17, 9:23
Сообщение #7
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


Цитата (Alexander @ 2020-10-27 04:42)
UPDATE `t1`,`t2` SET `t2`.`pay_date`=`t1`.`used_date` WHERE `t1`.`code`=`t2`.`code`
Спс. Поставил бы плюс, но увы)
+1
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2012-01-17, 18:56
Сообщение #8
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


termit, достаточно просто сказать "благодарю" :)
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-06-25, 17:13
Сообщение #9
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


Не стал плодить тем.

Как после Инсерт запроса можно узнать значение автоинкремента?

Я полагаю что что можно использовать после инсерт запроса, селект с count(`id`).
Только смущает что, между этими запросами может добавится ещё пару записей в таблицу.
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-06-25, 18:09
Сообщение #10
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


mysql_insert_id результата не даёт.

Internal Server Error
mysql_insert_id(): No such file or directory
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2012-06-25, 18:47
Сообщение #11
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (termit @ 2020-10-27 04:42)
Как после Инсерт запроса можно узнать значение автоинкремента?

Насколько я знаю (может и вру), но как-то так: $id=Db->Insert(); после этого $id+1 и есть значение автоинкремента.
Перейти в начало страницы
+Цитировать сообщение
LuxCore
сообщение 2012-06-25, 21:10
Сообщение #12
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 278
Регистрация: 2011-11-09

Репутация:   нет  
Всего: нет


Может есть ORACLЁвый аналог функции RETURNIG, используемый в запросах.
Перейти в начало страницы
+Цитировать сообщение
LuxCore
сообщение 2012-06-25, 21:20
Сообщение #13
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 278
Регистрация: 2011-11-09

Репутация:   нет  
Всего: нет


Вот, что говорит документация по MySQL:
Цитата
Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from multiple clients is perfectly valid. Each client will receive the last inserted ID for the last statement that client executed.

Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-06-26, 20:03
Сообщение #14
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


LuxCore, Loader, Спасибо огромное за помощь, Правда забыл упомянуть что это не для элеанорки, а так, пргосто для FatFree Framework. Маны по php и мускулу читал, но чтото не работало. Нашёл в доках ко FatFree Framework
$id = F3::get('DB')->pdo->lastInsertId();

Ребят, сори что не обьяснил конкретную ситуацию и поставил вопрос в лоб...
Перейти в начало страницы
+Цитировать сообщение
LuxCore
сообщение 2012-06-26, 23:13
Сообщение #15
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 278
Регистрация: 2011-11-09

Репутация:   нет  
Всего: нет


Не за что, termit.
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-08-08, 3:01
Сообщение #16
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


Опять, у меня проблемы с мускулом, выручайте)
Вот уже около часу бьюсь головой об одну вроде небольшую проблему.

Нужно обновить данные одним запросом в одной таблице.
Ну или упростить это:
UPDATE table SET `field`=0 WHERE `id`=1 or `id`=4 or `id`=14 ... 


Пытался следующим образом
UPDATE table SET `field`=0 WHERE `id` IN(1,4,14...);


В любом случае обновляется только одна запись, а нужно что бы во всех перечисленых установелось одниковое значение для конкретного поля.
Надеюсь понятно объяснился…

Сообщение отредактировал termit - 2012-08-08, 3:05
Перейти в начало страницы
+Цитировать сообщение
LuxCore
сообщение 2012-08-08, 8:29
Сообщение #17
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 278
Регистрация: 2011-11-09

Репутация:   нет  
Всего: нет


Что-то мне подсказывает, что OR нужно заменить на AND
UPDATE
  table
SET
  `field`=0
WHERE
  `id`=1 AND
  `id`=4 AND
  `id`=14 AND ...
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-08-08, 15:16
Сообщение #18
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


Результат аналогичный. обновляется только одна запись.
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2012-08-08, 15:30
Сообщение #19
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

Репутация:   нет  
Всего: 11


почемуто в phpmyadmin при редактировании нескольких строк одновременно используется инсерт вместо упдейт…

INSERT INTO `table` (`id` ,`field`)
VALUES
('1', '0'),
('2', '0'),
('100500', '0');
Перейти в начало страницы
+Цитировать сообщение
Djadka
сообщение 2012-08-08, 15:43
Сообщение #20
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 463
Регистрация: 2010-10-17

Репутация:   нет  
Всего: нет


UPDATE test SET `text` =0 WHERE `id` IN ( 1, 2 )

работает проверил только с ином можно так сделать, AND не катит чисто логически.
Перейти в начало страницы
+Цитировать сообщение

2 страниц Открыть меню   1 2 >
Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0502 сек.    11 запросов    GZIP включен    Сейчас: 2020-10-27, 3:42