Mysql
 sql >> Database >  >> RDS >> Mysql

Rostering esterno efficiente con MySQL ed ejabberd

IIUC, la tabella rosterusers è di sola lettura dal POV del tuo eJabberd app server. Questo renderebbe semplice sostituirlo con una view , che crea le 2 righe necessarie su 1 nella tabella dei tuoi amici.

Non conoscendo la struttura della tua tabella dell'amicizia, non posso darti il ​​codice completo, ma ecco quello che ho pensato come 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 ...
);

e poi

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

dovrebbe darti 2 righe, una per ciascuna parte di UNION nella Vista