CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » MySQL запрос на обновление
Официальный форум Eleanor CMS » Для вебмастеров и владельцев сайтов » Комната программистов
Страницы: 1, 2
termit
Доброго времени суток.

Случился на роботе трабл с мускулом (интернет провайдер, оплата по скретч картам). По моей вине "случайно" испортились данные в одной табличке в одном столбце.
Теперь начальство чуть ли не СБУ мне угрожает если не исправлю (доступ к 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:
Djadka
В таких случаях пользуюсь ETL устройством Pentaho мощная штука. Хотя мне кажется в таком случае проще будет через пхп. Вынимаем код и дату одним запросом. Потом через цикл идём и вставляем данные
'UPDATE `вторую таблицу`
SET `pay_date`=Данные из первого запроса
WHERE `code`= code из первого запроса
может ошибаюсь а скорую руку подумал
termit
Спасибо, за совет, совсем забыл про php)
Loader
Цитата (termit @ 2024-04-25 09:53)
Спасибо, за совет, совсем забыл про php)

Забыл??? :blink: :blink: :blink:
termit
В том смысле что работал напрямую с мускулом, через ssh, все скрипты на перле(который я плохо знаю). B)
Alexander
UPDATE `t1`,`t2` SET `t2`.`pay_date`=`t1`.`used_date` WHERE `t1`.`code`=`t2`.`code`
termit
Цитата (Alexander @ 2024-04-25 09:53)
UPDATE `t1`,`t2` SET `t2`.`pay_date`=`t1`.`used_date` WHERE `t1`.`code`=`t2`.`code`
Спс. Поставил бы плюс, но увы)
+1
Alexander
termit, достаточно просто сказать "благодарю" :)
termit
Не стал плодить тем.

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

Я полагаю что что можно использовать после инсерт запроса, селект с count(`id`).
Только смущает что, между этими запросами может добавится ещё пару записей в таблицу.
termit
mysql_insert_id результата не даёт.

Internal Server Error
mysql_insert_id(): No such file or directory
Loader
Цитата (termit @ 2024-04-25 09:53)
Как после Инсерт запроса можно узнать значение автоинкремента?

Насколько я знаю (может и вру), но как-то так: $id=Db->Insert(); после этого $id+1 и есть значение автоинкремента.
LuxCore
Может есть ORACLЁвый аналог функции RETURNIG, используемый в запросах.
LuxCore
Вот, что говорит документация по 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
LuxCore, Loader, Спасибо огромное за помощь, Правда забыл упомянуть что это не для элеанорки, а так, пргосто для FatFree Framework. Маны по php и мускулу читал, но чтото не работало. Нашёл в доках ко FatFree Framework
$id = F3::get('DB')->pdo->lastInsertId();

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

Нужно обновить данные одним запросом в одной таблице.
Ну или упростить это:
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...);


В любом случае обновляется только одна запись, а нужно что бы во всех перечисленых установелось одниковое значение для конкретного поля.
Надеюсь понятно объяснился…
LuxCore
Что-то мне подсказывает, что OR нужно заменить на AND
UPDATE
  table
SET
  `field`=0
WHERE
  `id`=1 AND
  `id`=4 AND
  `id`=14 AND ...
termit
Результат аналогичный. обновляется только одна запись.
termit
почемуто в phpmyadmin при редактировании нескольких строк одновременно используется инсерт вместо упдейт…

INSERT INTO `table` (`id` ,`field`)
VALUES
('1', '0'),
('2', '0'),
('100500', '0');
Djadka
UPDATE test SET `text` =0 WHERE `id` IN ( 1, 2 )

работает проверил только с ином можно так сделать, AND не катит чисто логически.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.