Mysql
 sql >> Base de données >  >> RDS >> Mysql

Répertoire externe efficace avec MySQL et ejabberd

IIUC, la table rosterusers est en lecture seule depuis le POV de votre eJabberd application serveur. Cela simplifierait les choses, pour le remplacer par une view , qui crée les 2 lignes nécessaires sur 1 ligne dans votre propre table d'amis.

Ne connaissant pas la structure de votre propre table d'amitié, je ne peux pas vous donner le code complet, mais voici ce que j'ai pensé en tant que pseudo-SQL

CREATE VIEW rosterusers AS SELECT * FROM (
    SELECT 
        selfuser.name AS username, 
        frienduser.jid AS jid,
        -- ....,
        selfuser.jid AS jid_as_id
    FROM
        users AS selfuser
        INNER JOIN friendships ON ....
        INNER JOIN users AS frienduser ON ...
    UNION SELECT 
        frienduser.name AS username, 
        selfuser.jid AS jid,
        -- ....,
        frienduser.jid AS jid_as_id
    FROM
        users AS selfuser
        INNER JOIN friendships ON ....
        INNER JOIN users AS frienduser ON ...
);

puis

SELECT
    username, jid, subscription, ask, server, type
FROM rosterusers
WHERE jid_as_id='[email protected]'

devrait vous donner 2 lignes, une de chaque partie de l'UNION dans la vue