0 votes
in SoSci Survey (dt.) by s144760 (130 points)

Liebes SoSci-Team,

wir haben gerade eine umfangreiche Studie laufen mit mehreren Wellen und arbeiten mit einem Panel-Provider zusammen.
Ein paar wenige Spezialisten melden sich dabei mehrfach an - mit unterschiedlicher E-Mail-Adresse. Im Datensatz sind diese dennoch auszumachen, da diesen dieselbe Panel-ID mitgegeben wurde.
Gerne würde ich zu Beginn der Registrierung eine Prüfung einbauen, in der die übergebene Panel-ID mit unserer internen Datenbank verglichen wird.
Wir schreiben bei erfolgreicher Anmeldung pro Teilnehmer eine Zeile in unsere Datenbank, wobei die SERIAL als KEY fungiert und die Spalte D0 die Panel-ID beinhaltet.
Gibt es eine Möglichkeit, auf alle Werte von D0 über ein Array zuzugreifen?
Alles, was ich bislang finden konnte, bezieht sich auf das Auslesen spezieller Zeilen der Datenbank, entweder über einen direkten Schlüssel oder einem Schlüssel-Präfix.

Über eine schlaue Lösung hierzu wäre ich sehr dankbar.

Besten Dank und viele Grüße!

1 Answer

+1 vote
by SoSci Survey (326k points)
selected by s144760
 
Best answer

Für die Suche wäre es deutlich (!) effizienter, wenn Sie die Panel-ID als Schlüssel verwenden würden. Sie könnten z.B. weitere Einträge in der Datenbank für Inhalte hinterlegen:

dbSet('PID-'.$panelID, caseSerial());

Dann wäre die Suche trivial.

Wenn Sie den Seriennummern noch ein Präfix vorangestellt haben, können Sie auch dbLoad($prefix) verwenden, um alle Einträge mit dem entsrpechenden Präfix zu laden. Nachdem das aber alles in den Speicher passen muss, kann es hier - je nach Anzahl der Teilnehmer:innen - durchaus Wartezeiten und/oder Abbrüche wg. eines Speicherüberlaufs geben.

by s144760 (130 points)
Lieben Dank für diese Antwort! Nunja, für eine zukünftige Studie wäre ich nun schlauer... Unsere Studie läuft bereits, sodass ich die Datenbank ungern anfassen möchte. Eine andere Möglichkeit als dbGet() über die PanelID oder dbLoad() mit einem Präfix gibt es nicht?
by SoSci Survey (326k points)
Es gibt noch dbKeys() verbunden mit einer FOREACH-Schleife und ganz vielen dbGet() ... aber das ist wirklich ziemlich ineffizient. Wir könnten dbLoad() noch so anpassen, dass es beim Weglassen des Präfix alles lädt. Aber das sollten Sie nur dann nutzen, wenn die Datenmenge (Anzahl Befragte und Speichermenge pro Person in der Datenbank für Inhalte) überschaubar ist.
by s144760 (130 points)
Da würde vermutlich nur Sinn ergeben und effizient sein, wenn ich gleichzeitig auch nur eine Spalte der Datenbank auslesen könnte. In unserem Fall haben wir fast 500 Zeilen und fast 90 Spalten - nur eine Spalte davon ist für diese Fragestellung relevant.
Das ist auch nicht schlimm, unsere Studie läuft gut und es handelt sich nur um wenige Spezialisten. Für eine zukünftige Studie würde ich den Aufbau der Datenbank mit Blick auf diese Problematik nochmal überdenken. Für diese würde ich es nun so belassen, wie es ist.
Vielen Dank für die Rückmeldungen!
by SoSci Survey (326k points)
Bei 500 Fällen wäre die Kombination aus dKeys() und dbGet() wohl noch gut machbar ... nachdem man nach jedme dbGet() direkt prüfen kann und die Daten nicht im Speicher behält, wäre das zwar ein wenig langsam aber nicht Speicherintensiv.

"Langsam" wäre es wohl auch eher im techinschen Sinn. Ich denke, auf s2survey.net sprechen wir von <1 Sekunde. Aber für ein paar Einzelfälle lohnt der Aufwand vermutlich trotzdem nicht.

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

...