Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Rostering externo eficiente com MySQL e ejabberd


IIUC, a tabela rosterusers é somente leitura a partir do PDV do seu eJabberd aplicativo do servidor. Isso tornaria simples, substituí-lo por uma view , que cria as 2 linhas necessárias de 1 linha em sua própria tabela de amigos.

Não conhecendo a estrutura de sua própria tabela de amizade, não posso lhe dar o código completo, mas aqui está o que eu pensei como 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 então
SELECT
    username, jid, subscription, ask, server, type
FROM rosterusers
WHERE jid_as_id='[email protected]'

deve fornecer 2 linhas, uma de cada parte do UNION na vista