Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток!
Подскажите пожалуйста каким образом можно записать в 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, для анализа и последующего обновления.
Надеюсь на Вашу помощь.
зЫ. очень надеюсь, что объяснился понятно
Отредактированно Quatermain (11.11.2009 11:17:27)
Неактивен
Прийдется написать программу
Неактивен
paulus написал:
Прийдется написать программу
а меньшей кровью обойтись нельзя?
Может быть как вариант, провести всё через временную таблицу и после сделать дамп? но при этом тоже не айс... не хотелось бы писать конвектор, к тому же база должна конвертироваться не полностью, а лишь нужные фрагменты.
Просто года два назад я где то встречал подобную комбинацию, но увы ось сносил и ничего не осталось, кроме одних воспоминаний
ps. как узнать количество записей (max, min, sum....????...), я так понимаю это: count(*) ????
Отредактированно Quatermain (11.11.2009 16:06:36)
Неактивен
Программу можно написать маленькую Подозреваю, что awk неплохо справится
с поставленной задачей. Ну, в смысле
Неактивен
К сожалению 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)
Неактивен
Ааа, сколько слов! Вы хоть на параграфы разделяйте
Хотите сделать со стороны базы — пытайтесь обыграть на уровне SELECT, других способов
выводить информацию в MySQL нету. Т.е. Вас устроит что-то типа
SELECT CONCAT('UPDATE tablename SET col1=', col1, ', col2=', col2, ...) FROM tablename;
Неактивен
phpMyAdmin умеет. Выполняете запрос, на странице с результатами справа внизу ссылка "экспорт".
Неактивен