0 votes
in SoSci Survey (dt.) by s052839 (475 points)

Lieber Support,

Ich würde gern den Zeitstempel der Einträge interner Datenbanken nutzen, um damit zu beeinflussen, welche Inhalte Versuchspersonen in der Studie sehen. Versuchspersonen werden immer Antworten gezeigt, die bereits vorige Versuchspersonen gegeben haben. Dabei hat die Versuchsperson die Möglichkeit, die Antworten der vorherigen Versuchsperson zu verbessern.

Um zu vermeiden, dass mehrere Versuchspersonen Daten derselben vorigen Versuchsperson sehen, würde ich gern den Zeitstempel nutzen. Hierzu möchte ich, sobald die Daten einer vorigen Versuchsperson angezeigt werden, mit dbTouch() den Zeitstempel erneuern. Nur Eingaben in der internen Datenbank, die älter als 30 Minuten sind, sollen dann für eine Versuchsperson bereitgestellt werden.

Mein Problem ist jetzt, dass ich nicht auf diesen Zeitstempel zugreifen kann. In dem array, das bei dbGet() ausgegeben wird, sehe ich nur die Antworten, auf die Fragen, die angegeben wurden. Aber selbst wenn ich den Zeitstempel hier manuell zusätzlich einlese (und darauf verzichte, dass es mit dbTouch() eine einfache Alternative gibt, ihn neu zu setzen, wenn eine Versuchsperson diese Daten gerade "bearbeitet"), kann ich date_diff() nicht nutzen, um zu schauen, welcher interne Datensatz überhaupt zur Bearbeitung infrage kommt (weil älter als 30 Minuten).

Gibt es noch eine andere Möglichkeit, an den automatisch erstellten Zeitstempel zu kommen, oder muss ich ihn selbst "manuell" als Teil der einzulesenden Daten erstellen? Gibt es eine Möglichkeit, eine Zeitdifferenz damit zu berechnen?

Ich hatte so ein ähnliches Vorgehen hier (https://www.soscisurvey.de/help/doku.php/de:create:functions:dbtouch) gesehen, wo Antwortoptionen anhand einer bestimmten abgelaufenen Zeit abgewählt werden. Leider wird nicht erklärt, wie das geht.

Liebe Grüße und schon mal vielen Dank für die Hilfe!

related to an answer for: Zeitstempel in interner Datenbank auslesen

1 Answer

0 votes
by SoSci Survey (327k points)
selected by s052839
 
Best answer

Ich hatte so ein ähnliches Vorgehen hier gesehen

In der Anleitung ist gemeint, dass man nicht-benutzte Einträge manuell (z.B. alle 2 Tage) bereinigt.

Ich habe gerade nochmal die Quellcode durchgesehen: Bisher ist die Abfrage des Zeitstempels direkt per PHP-Code nicht vorgesehen.

Ich würde folgenden Workaround vorschlagen: Schreiben Sie den Zeitstempel time() einfach mit als Wert in den Datenbank-Eintrag. Und setzen Sie eine weitere Spalte noch auf 0.

Wenn dann ein Eintrag zum Kommentieren geladen wird, dann speichern Sie den Beginn der Bearbeitungszeit in die dritte Spalte, also z.B.

$info = dbGet($key);
$info[2] = time();
dbSet($key, $info);

Dann können Sie beim Aufruf der Datenbank-Schlüssel bequem prüfen, ob dieser in den letzten 30 Minuten kommentiert wurde.

$info = dbGet($key);
if (time() - $info[2] < 1800) {
  // anderen Schlüssel verwenden
}

In einer vierten Spalte könnten Sie sogar vermerken, ob und ggf. wie oft ein Eintrag schon kommentiert/verbessert wurde. Das am besten erst, wenn auch wirklich etwas abgeschickt wurde.

Für die Auswahl eines geeigneten Schlüssels können Sie dann dbLoad() verwenden. Diese Funktion ist in der Anleitung noch nicht dokumentiert. Sie erwartet als ersten Parameter ein Präfix für die Schlüssel und erlaubt als zweiten und dritten Parameter die Spaltennummern (beginnend mit 0), nach denen die Daten sortiert werden sollen.

Wenn Sie dann nach der vierten Spalte sortieren (wie oft schon bewertet), dann haben Sie die guten Kandidaten gleich oben. Dann noch nach Spalte 3 (=Index 2) und Sie sind eigentlich schon fertig :)

$data = dbLoad('A', 3, 2);
by s052839 (475 points)
Vielen Dank!

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

...