0 votes
in SoSci Survey (dt.) by s082232 (355 points)

Liebes Team,

ich möchte den Teilnehmenden gern eine persönliche Auswertung zu mehreren Persönlichkeitsdimensionen geben. Mit Hilfe Ihrer Anleitung habe ich das für eine Befragungswelle mit ChartJS erfolgreich realisiert.

Die Studie hat allerdings drei Befragungswellen und ich würde den Teilnehmenden gern ihre Antworten aus allen drei Wellen in derselben Grafik anzeigen lassen. Dafür müsste ich die Antworten jeder Welle vermutlich in einer Datenbank für Inhalte ablegen und auf der Feedback-Seite wieder auslesen.

Nun bin ich leider etwas überfordert, wie ich die verschiedenen Dimensionen aus den verschiedenen Wellen in der Datenbank ablege und korrekt wieder auslese. Im Moment berechne ich die einzelnen Variablen in dieser Art:

$fear = valueMean('HE01', [5,29,53]);

Diese Werte wird dann über $ownData in ein Array zusammengefügt:

$ownData = [$sinc, $fair, $greed, $modest,...]

Und anschließend an show übergeben:

show('HE04', [
  '%labels%' => json_encode($labels),
  '%ownData%' => json_encode($ownData)
  // '%refData%' => json_encode($refData)
]);

Wie kann ich diese Daten am besten in die Datenbank speisen und wieder auslesen? Vielen Dank für Ihre Hilfe!

1 Answer

0 votes
by SoSci Survey (303k points)
edited by SoSci Survey

Nun bin ich leider etwas überfordert, wie ich die verschiedenen Dimensionen aus den verschiedenen Wellen in der Datenbank ablege und korrekt wieder auslese.

Zum Glück unterstützt die Datenbank für Inhalte seit ein paar Monaten nicht nur einfache (indizierte) Arrays, sondern auch Objekte. So können Sie Ihre Daten aus den drei Wellen relativ einfach ablegen.

$ownData = [$sinc, $fair, $greed, $modest,...]
$key = 'R-'.caseSerial();

// Auslesen, wenn es schon etwas gibt
$data = dbRetrieve($key);
if (!$data) {
    $data = [];
}

// Neue Welle ergänzen
$data['wave1'] = $ownData;
dbStore($key, $data);
by s082232 (355 points)
Vielen Dank! Das sieht sehr gut aus. Jetzt muss ich vermutlich noch irgendwo hinterlegen, um welche Welle es sich handelt, damit SosciSurvey weiß, wann es was eintragen muss, oder?

Und wie lese ich die einzelnen Wellen am Ende wieder heraus?

Der Befehl oben muss "dbRetrieve" heißen (nur zur Info für alle nachfolgenden Nutzer*innen).
by s082232 (355 points)
Das Eintragen der Daten in spezifische Wellen habe ich mittlerweile gelöst:

//Wellen einpflegen
if (($studyWave == 1) or ($studyWave == 2) or ($studyWave == 7)) { // if first or second wave
    $data['wave1'] = $ownData;
    dbStore($key, $data);
} elseif (($studyWave == 3) or ($studyWave == 4) or ($studyWave == 8)) {
    $data['wave2'] = $ownData;
    dbStore($key, $data);
} else {
    $data['wave3'] = $ownData;
    dbStore($key, $data);
}

Das klappt einwandfrei. Nur beim Auslesen gibt es noch Probleme. Ich habe den ChartJS-Code entsprechend um die drei Wellen ergänzt und folgenden Code für das Auslesen aus der Datenbank geschrieben:

//Aus Datenbank holen
$key = 'R-'.caseSerial();
$data = dbRetrieve($key);

$data['wave1'] = $ownData1;
$data['wave2'] = $ownData2;
$data['wave3'] = $ownData3;
 
// Textbaustein mit dem HTML-Code für das Chart einbinden
show('HE04', [
  '%labels%' => json_encode($labels),
  '%ownData1%' => json_encode($ownData1),
  '%ownData2%' => json_encode($ownData2),
  '%ownData3%' => json_encode($ownData3)
]);

Das funktioniert leider nicht. Mit welcher Funktion kann ich denn ein Array aus der Datenbank auslesen und als Array verfügbar machen? Dankeschön!
by s082232 (355 points)
Problem gelöst :-)

if ($data) {
    $ownData1 = $data['wave1'];
    $ownData2 = $data['wave2'];
    $ownData3 = $data['wave3'];
}

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...