从多个表中选择时,pg promise nest表结果

时间:2017-10-23 10:16:58

标签: javascript node.js postgresql javascript-objects pg-promise

我有查询从多个表中获取数据。 我正在使用节点js的pg-promise。 我的旧项目数据库是MySql,我使用node [mysql] [1] whick允许我从这样的查询得到嵌套结果:

var nestingOptions = [
            { tableName : 'chat', key: 'chatID' },
            { tableName : 'chat_contacts', key: 'userID', hasForeignKeyToUpperTable: true },
            { tableName : 'users', key: 'userID', hasForeignKeyToUpperTable: false }
        ]

        connection.query({ sql: queryString, nestTables: true }, function (err, rows, fields) {

            var response = chatResponseFromQuery(err, rows, fields, nestingOptions);
            return(response.status, response);
        });

查询结果嵌套在这样的表中:

chat [row data, chat_contacts[row_data]]

chatResponseFromQuery函数正在使用我的lib来判断chat._id是否会再次出现在结果中,基于nestingOptions中给出的关系,因此它可以将聊天数组中的chat_contacts数组和chat_contacts数组内的用户映射到同一个chat._id。

查询示例:

SELECT
chat._id chatID,
users._id userID,
users.uuid,
users.company_id,
users.role_id,
users.username,
users.name,
users.lastname,
users.email, 
users.phone,
users.push_token,
users.avatar_url,
users.cover_url,
users.device_type,
users.status,
users.last_seen,
users.created_at,
users.updated_at,
chat_contacts.contact_id userID,
chat_contacts.chat_id chatID
FROM company_one.chat
LEFT JOIN company_one.chat_contacts ON chat._id = chat_contacts.chat_id
LEFT JOIN company_one.users ON chat_contacts.contact_id = users._id
WHERE chat_contacts.chat_id IN(3,19)

所以基本上我只需要嵌套表,所以我可以再次重用我的lib来获得正确嵌套的json数据(在其他查询中我有更多的表,这是只有一个表的例子)。

0 个答案:

没有答案