SQLite Freundesliste für jeden angelegten Benutzer

  • Hallo liebe AutoIT Community,

    ich habe einen eigenen Datenbankserver gebaut der über TCP kommunizieren kann. User können sich über einen externen Client registrieren und anmelden.

    Das funktioniert alles auch hervorragend aber jetzt steh ich vor ein Problem. Ich wollte jetzt jedem angemeldeten User, mitteilen welche seiner Freunde Online sind.

    Dazu muss der Server aber auch wissen welcher User welche Freunde hat.

    Das sieht folgendermaßen aus: ( Der User mit ID 1 hat folgende Werte) Jetzt würde ich gerne alle Freunde von User 1 auslesen, in ein array speichern, jeden einzelnen prüfen wie der Status ist (On oder Off)

    und diesen Status dann dem jeweiligen Freund zuweisen. Anschließend schicke ich jeden Freund + Status an den Client. Der Client soll dann den Datensatz splitten und in eine ListView einfügen.

    ID Wert1 Wert2 Wert3 Wert 4 Freunde

    1 Name Mail Ort Online/Offline Hier müssen mehrere Freunde rein


    Ich hoffe ich konnte mich verständlich genug ausdrücken..., sry mein erstes mal in einen Forum.


    Schöne Grüße...

  • Hallo Dexter1993

    Vielleicht verstehe ich dich nicht richtig. Speichere einfach aktuellen online/offline-Status jeden Users in der DB. Die Freunde eines jeden Users sollten dort auch gespeichert sein. Dann muss dir auch kein Client ständig seine Freunde senden, sondern nur neue Freundschaften..

    Dann sind doch immer alle Informationen verfügbar, die du für den Dienst brauchst, oder?

    Grüße autoiter

  • Hallo Dexter1993

    Vielleicht verstehe ich dich nicht richtig. Speichere einfach aktuellen online/offline-Status jeden Users in der DB. Die Freunde eines jeden Users sollten dort auch gespeichert sein. Dann muss dir auch kein Client ständig seine Freunde senden, sondern nur neue Freundschaften..

    Dann sind doch immer alle Informationen verfügbar, die du für den Dienst brauchst, oder?

    Ja hey danke erstmal für die Antwort.

    Ich hab mich viel zu kompliziert oben ausgedrückt.... :D

    Der erste Schritt ist,

    das ich jedem User eine Freundesliste in der Datenbank zuteile.

    Ich möchte anhand des Namens ganz einfach alle Freunde dieser Person abrufen.

    ID ------Name ------Mail ------Passwort ------ Status----------------Freunde

    1 --------Bsp --------Bsp----------Bsp-------------ON/OFF-----------ALLE FREUNDE

    2....

    3....

    Einmal editiert, zuletzt von Dexter1993 (30. Dezember 2017 um 20:47) aus folgendem Grund: Falsch ausgedrückt

  • 2. Sobald sich der User erneut anmeldet, soll der Server alle Freunde + Status an den Client senden

    3. Dieser fügt die erhaltenen Freunde + Status in die ListView

    Okay.

    Die User zu trennen, damit du im Client richtig für die Listview eintragen kannst? Ist das dein Problem? Da kannst du doch beliebige Trennzeichen zwischen den Nutzernamen verwenden.

    Dein Projekt klingt ja eigentlich nicht nach deinem ersten Skript. Also versuch nochmal zu beschreiben, wo genau dein Problem liegt?

    Grüße autoiter

  • Ja das mit der Trennung z.B. durch (;) ist nicht schlecht.

    Nur wenn ich beim nächsten mal einen Freund hinzufüge, wird ja der vorherige Eintrag unter Freunden gelöscht

    und nicht ein weiterer Name zum bestehen Datensatz hinzugefügt.

    ID ------Name ------Mail ------Passwort ------ Status----------------Freunde

    1 --------Bsp --------Bsp----------Bsp-------------ON/OFF-----------ALLE FREUNDE (Detlef;Günter;Dirk;Tom; .... (Hier will ich jetzt noch was hinzufügen) Z.B. John;


    Bei der roten Markierung möchte ich immer nur noch was hinzufügen... aber ich kenne den genauen Befehl fürs einfache hinzufügen nicht... ich finde dazu auch nichts...

    _SQLite_Exec(-1, "UPDATE Datenbank SET Freunde = ' HIER MUSS EIN WEITERER FREUND HINZUGEFÜGT WERDEN UND NICHT DIE ALTEN DATEN ERSETZT WERDEN ' WHERE ID = "& $ID & "")

    Einmal editiert, zuletzt von Dexter1993 (30. Dezember 2017 um 20:58)

  • Dafür kannst du etwa _GUICtrlListView_AddItem benutzen. Ich würde aber wahrscheinlich immer die Listview komplett löschen und neu schreiben. Dann brauchst du nur eine Routine für Änderungen (nicht eine für Hinzufügung und eine für Entfernung) (_GUICtrlListView_DeleteAllItems dann _GUICtrlListView_AddArray oder folgende: _GUICtrlListView_BeginUpdate, _GUICtrlListView_AddItem, _GUICtrlListView_EndUpdate).


    EDIT: Du hast deinen Beitrag bearbeitet, während ich geschrieben habe.. Daher diese Ergänzung. Du hast also ein sqlite Problem. Hatte ich bisher nicht verstanden...

    Du kannst entweder einfach immer die neue Frendesliste vom Client senden lassen. Dann genügt weiter das einfache Update. Ansonsten mach einfach ein SELECT vor dem Bearbeiten und ergänze das Query um alle die bleiben sollen. Prinzipiell hättest du das Problem nicht, wenn in deiner DB eine Tabelle mit Freundverknüpfungen wäre. Das wäre viel einfacher und klarer.

    Dexter1993 Edit2: Hab vergessen, dass du noch benachrichtigt werden musst. Also hier der Ruf ;)

    Grüße autoiter

    2 Mal editiert, zuletzt von autoiter (30. Dezember 2017 um 21:08)

  • Hey danke für die Antwort.

    Ich beschäftige mich mit den ganzen kram seit gerade mal drei Tagen. Ich hab teilweise die Nacht durchgearbeitet. Vor drei Tagen wusste ich nicht mal das es überhaupt SQLite gibt :D

    Ich wollte es gerne vermeiden, das der Client Ordner, Freundeslisten o.ä. erstellt...

    Kannst du mir das mit den Freund Verknüpfungen etwas mehr erläutern?

  • Hehe, cool. :)

    So kann man arbeiten. Das ist aber der graue-Haaare-Ansatz ;)

    Es gibt sicher unterschiedliche Ansätze.

    Du kannst eine Freundpaar-Tabelle erstellen. Da kommen alle IDs der Pärchen hinein.

    Freund1|Freund2

    ID4|ID1

    ID1|ID2

    ID4|ID2

    ...

    Hier kannst einfach du mit SELECT, INSERT und DELETE arbeiten.

    Grüße autoiter

  • OK vielen dank. Damit werde ich mich nebenbei mal auseinander setzen.

    Die Lösung das die Freunde beim Client in einer Liste liegen, die habe ich schon umgesetzt gehabt und werde das erstmal beibehalten....

    Danke Thread kann geschlossen werden...