Ich schreibe ein Chat-Modul für eine benutzergesteuerte PHP / MySQL-Site, die es zwei Benutzern ermöglicht, Freunde zu finden, und sich für das Chat-System für eJabberd entschieden hat.
Ich habe die externe Authentifizierung erfolgreich mit einem PHP-Daemon eingerichtet, und jetzt habe ich erfolgreich die Freundschaften durch Verwendung von mod_roster_odbc
in eJabberd gebracht und die MySQL rosterusers
-Tabelle manuell gefüllt. Nach vielen Ausgrabungen gelang es mir, diesen speziellen Kommentar zu finden, der sehr hilfreich war, um zu wissen, worauf man jede Spalte setzen sollte , um diese Freundschaft in einer Freundesliste für das Chatmodul darzustellen.
Meine aktuelle Methode zum Bearbeiten von Freundschaften besteht darin, zwei Zeilen in die Tabelle rosterusers
einzufügen:
Ich bin nicht sehr glücklich damit, weil zwei Reihen für eine gegenseitige Freundschaft erforderlich sind.
Ich verstehe, dass XMPP standardmäßig einzelne und doppelte Verbindungen zwischen Benutzern ermöglicht. Wie man aus der Natur meiner Frage ableiten kann, verwendet das Freundsystem meiner eigenen Anwendung eine Zeile, um eine Freundschaft darzustellen.
Meine Hauptfragen:
TRIGGER
für jetzt die sauberste Option sein könnte. Wenn nicht, dann ist meine andere Option, die Tabelle rosterusers
zu ändern und dafür zu sorgen, dass sie sich auf die Friend-Zeile meiner eigenen Anwendung bezieht, so dass sie wie ein Cross-Datenbank-Fremdschlüssel funktioniert.
Ich habe eine Ansicht erstellt, wie Eugen vorgeschlagen hat. Der Code ist nicht der eleganteste, aber ich habe ihn getestet und er funktioniert mit eJabberd 2.1 auf MySQL 5.5.
Meine genaue Konfiguration verwendet zwei Datenbanken. Daher verweise ich explizit auf die Datenbank meiner Hauptanwendung, indem ich main_database.table_name
verwende.
Der Code ist eine Vereinigung von zwei Abfragen - die erste nimmt Benutzer, Freund und dann die zweite fügt Freund, Benutzer ein. Ich verwende UNION ALL
für die Geschwindigkeit und lasse "Duplikate" durch.
Ich denke, das ist eine wirklich gute Möglichkeit, das Problem zu lösen, da keine Änderungen in der Anwendung erforderlich sind, und es wird sofort aktualisiert.
%Vor% IIUC, die Tabelle rosterusers
ist schreibgeschützt vom POV Ihrer eJabberd
Server-App. Dies würde es einfach machen, es durch ein view
zu ersetzen, das die benötigte 2 Zeile aus 1 Zeile in Ihrer eigenen Freundes-Tabelle erstellt.
Wenn ich die Struktur Ihrer eigenen Freundschaftstabelle nicht kenne, kann ich Ihnen nicht den vollen Code geben, aber hier ist das, was ich als Pseudo-SQL empfand
%Vor%und dann
%Vor% sollte Ihnen zwei Zeilen geben, eine aus jedem Teil von UNION
in der Ansicht