Knex.js 个子查询 MySQL 左联接
Knex.js subqueries on MySQL left join
我是 Knex.js 查询生成器的新手,目前我在使用一个有点简单的 MySQL select 时遇到了问题。在这里:
SELECT orders.*, coalesce(x.unread, 0) AS unread_messages
FROM orders
LEFT JOIN
(SELECT id_order, COUNT(*) AS unread
FROM chats
WHERE read_by_user = 0
GROUP BY id_order) AS x
ON x.id_order = orders.id_order
WHERE id_customer = 42
ORDER BY date_submitted;
我有点迷失阅读 Knex 的文档,但我应该使用 .joinRaw 进行连接并使用 knex.raw对于合并命令 ?
https://runkit.com/embed/1olni3l68kn4
knex('orders')
.select(
'orders.*',
knex.raw('coalesce(??, 0) as ??', ['x.unread', 'unread_messages'])
)
.leftJoin(
knex('charts')
.select('id_order', knex.raw('count(*) as ??', ['unread']))
.where('read_by_use', 0).groupBy('id_order').as('x'),
'x.id_order',
'orders.id_order'
)
.where('id_customer', 42)
.orderBy('date_submitted')
生产
select
`orders`.*, coalesce(`x`.`unread`, 0) as `unread_messages`
from `orders`
left join (
select `id_order`, count(*) as `unread`
from `charts`
where `read_by_use` = ?
group by `id_order`
) as `x`
on `x`.`id_order` = `orders`.`id_order`
where `id_customer` = ?
order by `date_submitted` asc
对于那些登陆这里的人:这是我在@Mikael 的大力帮助下的工作解决方案。
selectFromWhere = db('orders')
.select('orders.*', db.raw('IFNULL(??, 0) as ??', ['x.unread', 'unread_messages']))
.leftJoin(
db('chats')
.select('id_order', db.raw('count(*) as ??', ['unread']))
.where('read_by_user', 0)
.groupBy('id_order')
.as('x'),
'x.id_order',
'orders.id_order'
)
.where('id_customer', req.user.id_customer);
我是 Knex.js 查询生成器的新手,目前我在使用一个有点简单的 MySQL select 时遇到了问题。在这里:
SELECT orders.*, coalesce(x.unread, 0) AS unread_messages
FROM orders
LEFT JOIN
(SELECT id_order, COUNT(*) AS unread
FROM chats
WHERE read_by_user = 0
GROUP BY id_order) AS x
ON x.id_order = orders.id_order
WHERE id_customer = 42
ORDER BY date_submitted;
我有点迷失阅读 Knex 的文档,但我应该使用 .joinRaw 进行连接并使用 knex.raw对于合并命令 ?
https://runkit.com/embed/1olni3l68kn4
knex('orders')
.select(
'orders.*',
knex.raw('coalesce(??, 0) as ??', ['x.unread', 'unread_messages'])
)
.leftJoin(
knex('charts')
.select('id_order', knex.raw('count(*) as ??', ['unread']))
.where('read_by_use', 0).groupBy('id_order').as('x'),
'x.id_order',
'orders.id_order'
)
.where('id_customer', 42)
.orderBy('date_submitted')
生产
select
`orders`.*, coalesce(`x`.`unread`, 0) as `unread_messages`
from `orders`
left join (
select `id_order`, count(*) as `unread`
from `charts`
where `read_by_use` = ?
group by `id_order`
) as `x`
on `x`.`id_order` = `orders`.`id_order`
where `id_customer` = ?
order by `date_submitted` asc
对于那些登陆这里的人:这是我在@Mikael 的大力帮助下的工作解决方案。
selectFromWhere = db('orders')
.select('orders.*', db.raw('IFNULL(??, 0) as ??', ['x.unread', 'unread_messages']))
.leftJoin(
db('chats')
.select('id_order', db.raw('count(*) as ??', ['unread']))
.where('read_by_user', 0)
.groupBy('id_order')
.as('x'),
'x.id_order',
'orders.id_order'
)
.where('id_customer', req.user.id_customer);