Welcome, Guest
Username: Password: Remember me

TOPIC: Manual method for moving survey to another database

Manual method for moving survey to another database 2 years 2 months ago #101610

  • Mike1985_2
  • Mike1985_2's Avatar
  • Offline
  • Junior Lime
  • Posts: 25
  • Karma: 0
I have LimeSurvey 1.90 installed on two servers and I want to be able to copy a survey from one to the other without using the admin system to import or export.

How risky is it and what table do I need to consider??

Obviously I will need to copy `survey_xxxxx`, `tokens_xxxxx`, a row from `surveys` and a row from `surveys_languagesettings`. I suppose I will have to copy over the `conditions`, `questions` and `answers` as well. (Sorry I'm basically answering my on question here).

Will indexing and id's become an issue?
The administrator has disabled public write access.

Manual method for moving survey to another database 2 years 2 months ago #101612

  • Ben_V
  • Ben_V's Avatar
  • Online
  • Platinum Lime
  • Posts: 1594
  • Thank you received: 391
  • Karma: 103
Is your 2nd installation (for import) new?
...without using the admin system to import or export.
Pure curiosity: Why not?
Benoît
Last Edit: 2 years 2 months ago by Ben_V.
The administrator has disabled public write access.

Manual method for moving survey to another database 2 years 2 months ago #101615

  • Mike1985_2
  • Mike1985_2's Avatar
  • Offline
  • Junior Lime
  • Posts: 25
  • Karma: 0
Nothing more than inter-office politics! It's as sad as that.

They're both at 1.90 and are both already installed. It's looking like every single table needs partially copying here.

How about this.. Can I export the survey (using the admin system or whatever) as SQL? Just one time so I can unpick it and understand and consider everything that is needed? At the moment, the export is an XML file which I don't really understand..
The administrator has disabled public write access.

Manual method for moving survey to another database 2 years 2 months ago #101616

  • Ben_V
  • Ben_V's Avatar
  • Online
  • Platinum Lime
  • Posts: 1594
  • Thank you received: 391
  • Karma: 103
Theoretically you can update a database using PhpMyAdmin or similar interface...
In your case it sounds that you will get lots of trouble with groups & question IDs...
Note that you can change (everywhere) without problem the survey ID directly in your (xml) export/import file.

I hope another LS user may give you some good advices, because I can't personnaly encourage you to apply this process :(
Benoît
The administrator has disabled public write access.

Manual method for moving survey to another database 2 years 2 months ago #101621

  • c_schmitz
  • c_schmitz's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 918
  • Thank you received: 131
  • Karma: 96
TBH I don't see a viable solution here.
Best regards

Carsten Schmitz
LimeSurvey project leader
The administrator has disabled public write access.

Manual method for moving survey to another database 1 year 8 months ago #109649

  • Mike1985_2
  • Mike1985_2's Avatar
  • Offline
  • Junior Lime
  • Posts: 25
  • Karma: 0
Update...

In case anyone is interested. I have been working with this for a while now. I am essentailly sending the following SQL commands to a .sql file;
CREATE TABLE temp.`surveys` AS                  (SELECT * FROM limeSurvey.`surveys` WHERE `sid` = '$sid');
CREATE TABLE temp.`surveys_languagesettings` AS (SELECT * FROM limeSurvey.`surveys_languagesettings` WHERE `surveyls_survey_id` = '$sid');
CREATE TABLE temp.`surveys_rights` AS           (SELECT * FROM limeSurvey.`surveys_rights` WHERE `sid` = '$sid');
CREATE TABLE temp.`groups` AS                   (SELECT * FROM limeSurvey.`groups` WHERE `sid` = '$sid');
CREATE TABLE temp.`questions` AS                (SELECT * FROM limeSurvey.`questions` WHERE `sid` = '$sid');
CREATE TABLE temp.`assessments` AS              (SELECT * FROM limeSurvey.`assessments` WHERE `sid` = '$sid'); 
CREATE TABLE temp.`answers` AS             (SELECT t2.* FROM limeSurvey.`questions` as t1 LEFT JOIN limeSurvey.`answers` as t2 ON t1.`qid` = t2.`qid` WHERE t1.`sid` = '$sid' AND t2.`qid` IS NOT NULL);
CREATE TABLE temp.`conditions` AS          (SELECT t2.* FROM limeSurvey.`questions` as t1 LEFT JOIN limeSurvey.`conditions` as t2 ON t1.`qid` = t2.`qid` WHERE t1.`sid` = '$sid' AND t2.`qid` IS NOT NULL);
CREATE TABLE temp.`question_attributes` AS (SELECT t2.* FROM limeSurvey.`questions` as t1 LEFT JOIN limeSurvey.`question_attributes` as t2 ON t1.`qid` = t2.`qid` WHERE t1.`sid` = '$sid' AND t2.`qid` IS NOT NULL);
CREATE TABLE temp.`tokens_$sid` AS           (SELECT * FROM limeSurvey.`tokens_$sid`);
CREATE TABLE temp.`survey_$sid` LIKE limeSurvey.`survey_$sid`

I also ran this string replace to stop "TABLE ALREADY EXISTS" error
$file_contents = str_replace("CREATE TABLE","CREATE TABLE IF NOT EXISTS",$file_contents);

And these SQL lines to prevent ID clashing
ALTER TABLE `tokens_'.$sid.'` ADD PRIMARY KEY ( `tid` );
ALTER TABLE `tokens_'.$sid.'` ADD INDEX `tokens_'.$sid.'_idx` ( `token` );
ALTER TABLE `tokens_'.$sid.'` CHANGE `tid` `tid` INT( 11 ) NOT NULL AUTO_INCREMENT;
ALTER TABLE `survey_'.$sid.'` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT;	

This is probably of no interest to anyone but you never know...
Last Edit: 7 months 3 weeks ago by c_schmitz.
The administrator has disabled public write access.
Moderators: ITEd
Time to create page: 0.125 seconds