sql >> Database >  >> RDS >> Mysql

Efficiënt extern roosteren met MySQL en ejabberd

IIUC, de tabel rosterusers is alleen-lezen van de POV van uw eJabberd server-app. Dit zou het eenvoudig maken om het te vervangen door een view , dat maakt de benodigde 2 rij van 1 rij in je eigen vriendentabel.

Omdat ik de structuur van je eigen vriendschapstabel niet ken, kan ik je niet de volledige code geven, maar dit is wat ik dacht aan 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 ...
);

en dan

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

zou je 2 rijen moeten geven, één uit elk deel van de UNION in de weergave




  1. Kan sql-modules niet in het databasecluster laden tijdens PostgreSQL-installatie

  2. WHERE-component kan beter worden uitgevoerd voor IN en JOIN of erna

  3. Alleen-lezen gebruiker maken in PostgreSQL

  4. Maak een draaiweergave in SQL vanuit een SQL-tabel