[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вытащить с одной базы и записать в другую
bposter
Доброе время суток, столкнулся с такой проблемой нужно вытащить данные с одной базы данных и записать в другую базу, когда запускаю скрипт он записывает в базу данные где-то 10 строк а потом выдает мне Duplicate entry '12' for key 2 не пойму в чем косяк?


<?php


//подключаемся к базе данных
$bd = mysql_connect ("localhost","root","");
mysql_select_db ("email",$bd);
mysql_query('SET NAMES UTF8');

//вытягиваем что нам нужно
$result = mysql_query("SELECT user_id, name, news_num, email FROM jos_users ",$bd);
$com = mysql_fetch_array($result);

$name = $com["name"];
$news_num = $com["news_num"];
$email = $com["email"];
$user_group = 4;


do
{



//подключаемся к другой базе
$bd = mysql_connect ("localhost","root","");
mysql_select_db ("dle-test",$bd);
mysql_query('SET NAMES UTF8');

//добавляем запись в базу

$result2 = mysql_query ("INSERT INTO `dle_users` (`name`,`news_num`,`email`,`user_group`) VALUES ('$name','$news_num','$email','$user_group')",$bd) or die(mysql_error());
}
while ($com = mysql_fetch_array($result));




Спустя 37 минут, 28 секунд (22.02.2012 - 18:53) shmali написал(а):
Судя по тому что ты показал , ты из базы получаешь всего одну строку..
Так как
while 
у тебя работает только на запись .

И еще у тебя косяк в том что ты получаешь сразу вторую запись , минуя первую.
Вот почему
Цитата
$com = mysql_fetch_array($result);


Цитата
while ($com = mysql_fetch_array($result));


Спустя 12 минут, 57 секунд (22.02.2012 - 19:06) bposter написал(а):
Как правильно будет покажите пожалуста.

Спустя 4 минуты, 22 секунды (22.02.2012 - 19:11) killer8080 написал(а):
bposter
а что мешало дампом перекинуть?

Спустя 1 минута, 24 секунды (22.02.2012 - 19:12) shmali написал(а):
Правильно будет (по моему скромному мнению).

1.Записать полную выборку в массив
2.Переключиться на другую базу
3.Записать данные из массива в базу.

Думаю как записать в массив и как потом из него получить обратно данные , ты разберешься.

П.С: можно просто как советуют
Цитата
а что мешало дампом перекинуть?

Спустя 2 минуты, 44 секунды (22.02.2012 - 19:15) bposter написал(а):
Цитата (killer8080 @ 22.02.2012 - 16:11)
bposter
а что мешало дампом перекинуть?

движки разные

Спустя 2 минуты, 8 секунд (22.02.2012 - 19:17) bposter написал(а):
Цитата (shmali @ 22.02.2012 - 16:12)
Правильно будет (по моему скромному мнению).

1.Записать полную выборку в массив
2.Переключиться на другую базу
3.Записать данные из массива в базу.

Думаю как записать в массив и как потом из него получить обратно данные , ты разберешься.

П.С: можно просто как советуют
Цитата
а что мешало дампом перекинуть?


так в переменной $com и есть весь масив

$com

Спустя 37 секунд (22.02.2012 - 19:17) shmali написал(а):
Цитата
движки разные

Что значит движки разные ? там пхп не участвует, все на уровне MySql

Спустя 2 минуты, 21 секунда (22.02.2012 - 19:20) shmali написал(а):
Цитата
так в переменной $com и есть весь масив


ты плохо знаком с выборками .
Цитата
$com = mysql_fetch_array($result);

Выбирает первую строку которая подпадает под условия выборки .
Потому и используют цикл для обработки запроса.

Спустя 47 секунд (22.02.2012 - 19:21) killer8080 написал(а):
Цитата (bposter @ 22.02.2012 - 18:15)
движки разные

Причем тут движки? PMA что отменили? biggrin.gif


UPD делаешь дамп и ручками подправляешь.

Спустя 2 минуты, 11 секунд (22.02.2012 - 19:23) bposter написал(а):
Мне просто надо перенести данные с joomla на DLe тоесть вытягиваю с одной базы данные и записываю в другую

Спустя 2 минуты, 15 секунд (22.02.2012 - 19:25) shmali написал(а):
объясняю простым языком .
Dump - файл с содержимым базы данных, позволяющий воссоздать базу данных.

как это сделать ?

1.Экспортируешь таблицу с данными.
2.Импортируешь в новую базу.

Спустя 2 минуты, 42 секунды (22.02.2012 - 19:28) killer8080 написал(а):
bposter
а таблица в dle пустая?

Спустя 1 минута, 14 секунд (22.02.2012 - 19:29) bposter написал(а):
да это понятно но у джумлы и dle разные таблицы как по названию так и по количеству ечеек

Спустя 4 минуты, 4 секунды (22.02.2012 - 19:33) bposter написал(а):
Цитата (killer8080 @ 22.02.2012 - 16:28)
bposter
а таблица в dle пустая?

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

Спустя 3 минуты, 3 секунды (22.02.2012 - 19:36) shmali написал(а):

Цитата
да это понятно но у джумлы и dle разные таблицы как по названию так и по количеству ечеек

не понимаю ...
что мешает после импорта поменять название и добавить или удалить ячейки ?

Спустя 6 минут, 53 секунды (22.02.2012 - 19:43) bposter написал(а):
в dle есть ячейка група в ручную каждому акаунту прописывать групу это до утра будет

Спустя 3 минуты, 39 секунд (22.02.2012 - 19:47) shmali написал(а):
Цитата
в dle есть ячейка група в ручную каждому акаунту прописывать групу это до утра будет

Не в обиду , но у меня складывается ощущение что ты с MySql совсем не знаком .
Цитата
каждому акаунту прописывать группу это до утра будет


это всего 1 запрос . Тем более что судя по твоему начальному коду, номер группы у всех одинаковый.

Спустя 1 минута, 42 секунды (22.02.2012 - 19:48) bposter написал(а):
ну MySql знаю так тока записать вытыщить ну и как поля создавать

Спустя 2 минуты, 40 секунд (22.02.2012 - 19:51) shmali написал(а):
После импорта создашь колонку Group_nr (или как она у тебя там называется)
Откроешь гугл , наберешь в нем "MySql UPDATE" и все поймешь .

Спустя 55 секунд (22.02.2012 - 19:52) killer8080 написал(а):
mysql_connect ("localhost","root","");
mysql_select_db ("email");
mysql_query('SET NAMES UTF8');
$result = mysql_query("SELECT `user_id`, `name`, `news_num`, `email` FROM `jos_users`");
$data = array();
while($row = mysql_fetch_assoc($result))
$data []= $row;

mysql_select_db ("dle-test");
mysql_query('SET NAMES UTF8');

foreach($data as $row){
mysql_query("
INSERT INTO `dle_users`
(`name`,`news_num`,`email`,`user_group`)
VALUES
('"
.$row['name']."','".$row['news_num']."','".$row['email']."',4)
"
);
}

Спустя 9 минут, 7 секунд (22.02.2012 - 20:01) bposter написал(а):
Цитата (killer8080 @ 22.02.2012 - 16:52)
mysql_connect ("localhost","root","");
mysql_select_db ("email");
mysql_query('SET NAMES UTF8');
$result = mysql_query("SELECT `user_id`, `name`, `news_num`, `email` FROM `jos_users`");
$data = array();
while($row = mysql_fetch_assoc($result))
$data []= $row;

mysql_select_db ("dle-test");
mysql_query('SET NAMES UTF8');

foreach($data as $row){
mysql_query("
INSERT INTO `dle_users`
(`name`,`news_num`,`email`,`user_group`)
VALUES
('"
.$row['name']."','".$row['news_num']."','".$row['email']."',4)
"
);
}

Спасибо огромное все переписалось хорошо smile.gif

Спустя 1 час, 49 минут, 40 секунд (22.02.2012 - 21:51) sergeiss написал(а):
Цитата (bposter @ 22.02.2012 - 20:29)
да это понятно но у джумлы и dle разные таблицы как по названию так и по количеству ячеек

Тогда "выливай" таблицы в текстовые файлы, а затем заливай в нужные таблицы в новой БД. Это наиболее универсальный вариант. Заодно в процессе можно как-то отфильтровать данные, чтобы не всё перекачивать, а только некую нужную часть.


_____________
Вязание xe4.ru спицами.
Сайт для тестов (подопытный №543)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.