SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.11.2009 11:10:31

Quatermain
Участник
Зарегистрирован: 10.10.2009
Сообщений: 5

[help]Запись в sql файл.

Доброго времени суток!
Подскажите пожалуйста каким образом можно записать в sql файл в виде update определённые данные колонки с одной таблицы базы данных, опираясь на вторую базу данных?
Например вывод данных такой:

Код:

SELECT `id`, `name`, `pass` FROM `db2`.`account` WHERE `db2`.`account`.`name`=`db`.`account`.`name`;

либо обновление сразу:

Код:

UPDATE `db`.`account`  SET `password`=`db2`.`account`.`pass` WHERE `db`.`account`.`name`=`db2`.`account`.`name`;

(На примере в базах разные имена колонок `pass` и `password`)
Но эти записи условны т.к. планируется более сложные запросы.
Суть идеи такова: Есть две базы данных, одна старая, вторая новая, но в новой структура таблиц немного изменена и название некоторых колонок. Нужно выдернуть определённые столбцы со старых таблиц при условии, что в новой есть схожая запись по `id`, `name`, `enty` и так далее.. и всё это необходимо в sql фаил с записью update, для анализа и последующего обновления.
Надеюсь на Вашу помощь.
зЫ. очень надеюсь, что объяснился понятно big_smile

Отредактированно Quatermain (11.11.2009 11:17:27)

Неактивен

 

#2 11.11.2009 11:40:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: [help]Запись в sql файл.

Прийдется написать программу smile

Неактивен

 

#3 11.11.2009 15:02:32

Quatermain
Участник
Зарегистрирован: 10.10.2009
Сообщений: 5

Re: [help]Запись в sql файл.

paulus написал:

Прийдется написать программу smile

а меньшей кровью обойтись нельзя?
Может быть как вариант, провести всё через временную таблицу и после сделать дамп? но при этом тоже не айс... не хотелось бы писать конвектор, к тому же база должна конвертироваться не полностью, а лишь нужные фрагменты.
Просто года два назад я где то встречал подобную комбинацию, но увы ось сносил и ничего не осталось, кроме одних воспоминаний big_smile

ps. как узнать количество записей (max, min, sum....????...), я так понимаю это: count(*) ????

Отредактированно Quatermain (11.11.2009 16:06:36)

Неактивен

 

#4 11.11.2009 17:18:24

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: [help]Запись в sql файл.

Программу можно написать маленькую smile Подозреваю, что awk неплохо справится
с поставленной задачей. Ну, в смысле

mysql -NBe "SELECT * FROM prepared_view" | awk '{ print "UPDATE tablename SET col1=",$1, …}'


И сделать представление, из которого вытащить уже данные в нужном виде.

Неактивен

 

#5 12.11.2009 11:22:46

Quatermain
Участник
Зарегистрирован: 10.10.2009
Сообщений: 5

Re: [help]Запись в sql файл.

К сожалению awk мне незнаком, но прочитал немного учебника понял, что можно обойтись и сложным запросом т.к. функционально почти одинаково, но хотелось бы обойтись одной MySQL.
Сразу переносить данные это риск испортить существующию базу, потому что нужно заполнить только некоторые столбцы т.е. сами строки уже существуют и insert не подойдёт.
немного статистических данных: записей в старой db - 8563, в новой db - 8803, схожих по имени т.е. какие выдергивать значение колонок - 8361.
Вот например не сложный запрос о обновлении данных по совпадению имён:

Код:

UPDATE `tablename` FROM `db`.`tablename` WHERE (`name` in (SELECT `name` from `db2`.`tablename`));

но всё же как это загать в sql файл?
Если я делаю временную таблицу с теми колонками которые переносится и запрос с insert, после дампом выдёргиваю и т.д. , в принципе реально, но долго и муторно... неужели нет других более простых вариантов?
Хех.. пойду зубрить тогда awk, может что получится ) , к стати вроде платформа  UNIX для awk, у меня Win.. или я что то напутал???
================
/*Так как я не особо вник в тонкости awk и появилось куча связующих вопросов по коду, то в связи с ограниченным временем решил пойти по пути MySQL запросов.*/
Структура:
старая база = db
новая база = world
временая база = test
перенос данных = из db.users.size в world.users.size (при этом записи могут отличатся между entry и name, в данном случаи приоритетный name, хотя ключом является entry)
Сделал временную базу test, с нужной таблицей users и двумя колонками в ней `entry`(key) и `size`.
Записал её запросом:

Код:

 INSERT INTO `test`.`users` SELECT `entry`, `size` FROM `db`.`users` WHERE (`name` in (SELECT `name` from `world`.`users`));

Тут записываю нужные значения во временную базу и таблицу с тем же именем то что совпадает по имени в старой и новой таблице.
Таблица записана с нужными значениями (числа в колонки size не являются целыми).
Далее делать дамп не особо корректно т.к. insert не подходит и исправлять на update 8361 строк... :\
Остался на уровне временной таблицы, табличку проверил теми же запросами на возможные конфликты, подредактировал, теперь с неё можно переносить данные в новую базу world.
Тут столкнулся с очередной проблемой, это запрос update с test.users в world.users, так как появилась привязка к entry. Множество вариантов пробывал, но к нужному так и не пришёл.
Может подскажете как этот запрос реализовать?

Отредактированно Quatermain (12.11.2009 14:48:13)

Неактивен

 

#6 12.11.2009 16:55:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: [help]Запись в sql файл.

Ааа, сколько слов! Вы хоть на параграфы разделяйте smile
Хотите сделать со стороны базы — пытайтесь обыграть на уровне SELECT, других способов
выводить информацию в MySQL нету. Т.е. Вас устроит что-то типа
SELECT CONCAT('UPDATE tablename SET col1=', col1, ', col2=', col2, ...) FROM tablename;

Неактивен

 

#7 26.11.2009 12:30:31

rdva
Участник
Зарегистрирован: 26.11.2009
Сообщений: 1

Re: [help]Запись в sql файл.

phpMyAdmin умеет. Выполняете запрос, на странице с результатами справа внизу ссылка "экспорт".

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson