|
|
|
|
|
для: sasha_ua
(08.01.2011 в 16:10)
| | Можно, но как правило, удаленный доступ к базе данных провайдера запрещен. Дело в том, что для удаленного доступа необходимо создавать отдельный сетевой аккаунт, который практически никогда не создают, пока вы настоятельно это не попросите. Без этого удаленного аккаунта все попытки удаленной работы бесполезны.
>Где-то читал что разворачивать удаленную БД путем множества транзакций не оптимально, т.к.
>хостер может и забанить за множество обращений к БД..
Если сетевой доступ открыт, то сессия будет одна (да, у некоторых провайдеров имеется ограничение на количество запросов в час, но это ограничение распространяется и на локальные запросы). В любом случае, при создании дампа, вы всегда можете потребовать, чтобы INSERT-запросы были многострочными, а не однострочными - в этом случае это ограничение можно обойти (правда там вступает в действие другое ограничение - на объем одного запроса). | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2011 в 14:14)
| | Ясно.
Я делал дамп через mysql, все получилось, но хотелось бы знать каким путем можно пойти. Т.е. помимо phpmyadmin есть еще способы создания/экспорта дампа в удаленную БД?
Как-то так:
mysqldump [OPTIONS] database [tables]
|
?
Где-то читал что разворачивать удаленную БД путем множества транзакций не оптимально, т.к. хостер может и забанить за множество обращений к БД..
P.S. Я написал функцию которая из локальной таблицы копирует в удаленную, но показывать не буду все равно скажете лажа :) | |
|
|
|
|
|
|
|
для: sasha_ua
(08.01.2011 в 14:00)
| | >
INSERT INTO TABLE target_table (target_columns,...)
SELECT source_columns, ... FROM source_table
|
>
>Такая конструкция подойдет для копирования из локальной базы в удаленную?
нет, конечно.
Но и ваша функция (03.01.2011 в 15:24) не подойдет точно также.
Такая конструкция производит копирование не из базы в базу, а из таблицы в таблицу.
Базы данных этих таблиц, хотя и могут быть разными, все же должны быть при этом а) созданы на одном сервере, и б) иметь права доступа от одного эккаунта.
Базы с сервера на сервер переносятся через экспорт и последующий импорт дампа. | |
|
|
|
|
|
|
|
для: sasha_ua
(08.01.2011 в 14:00)
| | Нет, еще из одной базы данных в другую в рамках одного сервера можно скопировать таблицу, если использовать расширенные имена, включающие названия баз данных. Однако, для развертывания базы данных на удаленном сервере придется создавать SQL-дамп и развертывать его либо при помощи какого-то клиента вроде phpMyAdmin, либо при помощи консольного клиента mysql. | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2011 в 19:16)
| |
INSERT INTO TABLE target_table (target_columns,...)
SELECT source_columns, ... FROM source_table
|
Такая конструкция подойдет для копирования из локальной базы в удаленную? | |
|
|
|
|
|
|
|
для: sasha_ua
(03.01.2011 в 15:24)
| | Я бы посоветовал не городить этот ужас, а воспользоваться формой оператора INSERT-SELECT
INSERT INTO TABLE target_table (target_columns,...)
SELECT source_columns, ... FROM source_table
|
Посоветовал бы, если б не одно но.
Возникает сильное подозрение, что общих колонок у этих двух таблиц чересчур много.
А значит модель явно проектировалась левой ногой.
Попытка работать с ключом id таблицы parts, как с непрерывной последовательностью, (если это кончно не явная логическая ошибка) тоже не говорит в пользу модели ничего хорошего.
>NULL обрамляется двумя одинарными кавычками с каждой стороны?
NULL не требуется ничем обрамлять. Это ключевое слово языка. | |
|
|
|
|
|
|
|
для: sasha_ua
(03.01.2011 в 15:24)
| | >chepikmas - кто это?
Извиняюсь, не тот ник скопировал :))) | |
|
|
|
|
|
|
|
для: cheops
(03.01.2011 в 14:41)
| | Не разобрался как отвечать всем :)
Вот функция полностью:
function make_category()
{
$dim = get_max_id("parts","id");
$query="TRUNCATE TABLE `local_vm_category`";
mysql_query($query);
for($i=1; $i<=$dim; $i++)
{
$cdate = time();
$mdate = time();
// mysql_real_escape_string
$sql = "SELECT `vendor_id`,`category_name`,`category_description`,
`category_thumb_image`,`category_full_image`,
`category_publish`, `category_browsepage`,
`products_per_row`, `category_flypage`,`list_order`
FROM `parts` where `id`=$i";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$vendor_id = $row[0];
$category_name = $row[1];
if(!$row[2])
{
$category_description = NULL;
}
else
{
$category_description = $row[2];
}
$category_thumb_image = $row[3]; // NULL
$category_full_image = $row[4]; // NULL
$category_publish = $row[5];
$category_browsepage = $row[6];
$products_per_row = $row[7];
$category_flypage = $row[8]; // NULL
$list_order = $row[9];
$sql2='INSERT INTO local_vm_category(vendor_id, category_name, category_description,
category_thumb_image, category_full_image,
category_publish, cdate, mdate, category_browsepage,
products_per_row, category_flypage, list_order) values(\''.
$vendor_id.'\',\''.$category_name.'\',\''.
$category_description.'\',\''.$category_thumb_image.'\',\''.
$category_full_image.'\',\''.$category_publish.'\',\''.
$cdate.'\',\''.$mdate.'\',\''.$category_browsepage.'\',\''.
$products_per_row.'\',\''.$category_flypage.'\',\''.
$list_order.'\')';
mysql_query($sql2);
}
}
|
Если я правильно понял вы рекомендуете составлять запрос по частям с промежуточными проверками $category_description, т.е. напрямую вставлять NULL в запрос?
т.е. запрос должен выглядеть так:
$sql2 = 'INSERT INTO local_vm_category(vendor_id,
category_name, category_description, category_thumb_image,
category_full_image, category_publish, cdate, mdate,
category_browsepage, products_per_row, category_flypage,
list_order) values(\''.$vendor_id.'\',\''.
$category_name.'\',''NULL'',\''.
$category_thumb_image.'\',\''.$category_full_image.'\',\''.
$category_publish.'\',\''.$cdate.'\',\''.$mdate.'\',\''.
$category_browsepage.'\',\''.$products_per_row.'\',\''.
$category_flypage.'\',\''.$list_order.'\')';
|
?
NULL обрамляется двумя одинарными кавычками с каждой стороны?
chepikmas - кто это? | |
|
|
|
|
|
|
|
для: cheops
(03.01.2011 в 14:41)
| | >Это зависит от того, как переменная $category_description формируется, я думаю chepikmas это знает лучше нас и сформирует адекватное условие, так как вместо "NULL" может быть "null" или "Null" и если это так, следует учесть эти дополнительные случаи.
я исходил из поста автора: sasha_ua (02.01.2011 в 14:17)
Вот мой запрос б БД:
$category_description = NULL;
[...]
|
в его же посте (02.01.2011 в 16:48) повторяется аналогичная строка.
Оператор $category_description = NULL; означает, что переменной $category_description присваивается специальное значение null, не являющееся строковым, запись которого одинаково трактуется что большими, что маленькими буквами, и никак не соответствует строке из четырех символов 'NULL'.
Что автор является клоном chepikmas - мне лично неизвестно, и оставлять за ним право на последнюю истину в голову не пришло.
За самим автором, кстати, тоже - уж коль скоро обрисовал условия задачи конкретно, с чего бы от этих условий потом отказываться?
>Кроме того, я так понимаю $category_description не единственная переменная требующая подобной обработки - эта обработка также нужна для других подобных переменных.
Про необходимость обработки остальных переменных согласен целиком и полностью. | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2011 в 14:32)
| | Это зависит от того, как переменная $category_description формируется, я думаю chepikmas это знает лучше нас и сформирует адекватное условие, так как вместо "NULL" может быть "null" или "Null" и если это так, следует учесть эти дополнительные случаи. Кроме того, я так понимаю $category_description не единственная переменная требующая подобной обработки - эта обработка также нужна для других подобных переменных. | |
|
|
| |
|