【问题标题】:Knex.js subqueries on MySQL left joinMySQL 左连接上的 Knex.js 子查询
【发布时间】:2018-01-04 15:05:48
【问题描述】:

我是 Knex.js 查询生成器的新手,我目前在使用某种简单的 MySQL 选择时遇到问题。这里是:

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 进行合并命令吗?

【问题讨论】:

    标签: mysql knex.js


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      对于那些来到这里的人:在@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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-31
        • 2020-02-14
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 2015-09-17
        • 2016-10-18
        • 1970-01-01
        相关资源
        最近更新 更多