sql >> Base de Datos >  >> RDS >> Mysql

Listado externo eficiente con MySQL y ejabberd

IIUC, la tabla rosterusers es de solo lectura desde el punto de vista de su eJabberd aplicación de servidor Esto lo simplificaría, para reemplazarlo con una view , que crea las 2 filas necesarias de 1 fila en su propia tabla de amigos.

Al no conocer la estructura de su propia tabla de amistad, no puedo darle el código completo, pero esto es lo que consideré 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 ...
);

y luego

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

debería darte 2 filas, una de cada parte de UNION en la Vista