Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Manual method for moving survey to another database

More
11 years 11 months ago #101610 by Mike1985_2
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 topic has been locked.
More
11 years 11 months ago - 11 years 11 months ago #101612 by Ben_V
Is your 2nd installation (for import) new?

...without using the admin system to import or export.

Pure curiosity: Why not?

Benoît

EM Variables => bit.ly/1TKQyNu | EM Roadmap => bit.ly/1UTrOB4
Last Releases => 2.6x.x goo.gl/ztWfIV | 2.06/2.6.x => bit.ly/1Qv44A1
Demo Surveys => goo.gl/HuR6Xe (already included in /docs/demosurveys)
Last edit: 11 years 11 months ago by Ben_V.
The topic has been locked.
More
11 years 11 months ago #101615 by Mike1985_2
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 following user(s) said Thank You: ciphr
The topic has been locked.
More
11 years 11 months ago #101616 by Ben_V
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

EM Variables => bit.ly/1TKQyNu | EM Roadmap => bit.ly/1UTrOB4
Last Releases => 2.6x.x goo.gl/ztWfIV | 2.06/2.6.x => bit.ly/1Qv44A1
Demo Surveys => goo.gl/HuR6Xe (already included in /docs/demosurveys)
The topic has been locked.
More
11 years 11 months ago #101621 by c_schmitz
TBH I don't see a viable solution here.

Best regards

Carsten Schmitz
LimeSurvey project leader
The topic has been locked.
More
11 years 4 months ago - 10 years 4 months ago #109649 by Mike1985_2
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;
Code:
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
Code:
$file_contents = str_replace("CREATE TABLE","CREATE TABLE IF NOT EXISTS",$file_contents);

And these SQL lines to prevent ID clashing
Code:
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: 10 years 4 months ago by c_schmitz.
The following user(s) said Thank You: ciphr
The topic has been locked.
Moderators: tpartnerholch

Lime-years ahead

Online-surveys for every purse and purpose