【问题标题】:How to subtract query in knex.raw in node.js如何在node.js中减去knex.raw中的查询
【发布时间】:2018-06-07 14:59:16
【问题描述】:

我已经在 mysql 中完成了这个查询,但我不知道如何在 knex.raw 中执行此操作。

    select ((select leave_trackers.available_leaves from leave_trackers) -
(SELECT ((DATEDIFF('2018-06-11', '2018-06-01') + 1) - 
(WEEK('2018-06-11') - WEEK('2018-06-01')) -
(case when weekday('2018-06-11') = 6 then 1 else 0 end) -
(SELECT IFNULL(sum(total), 0)
from
(
select count(holidays.date) as total
FROM holidays, leave_applications 
WHERE holidays.date between '2018-06-01' and '2018-06-01'
GROUP BY holiday_id) as holiday_leave 
)
) as available_leaves
FROM leaves
group by leave_id
));  

有人可以帮我把它转换成 knex.raw 吗?

【问题讨论】:

    标签: mysql node.js knex.js bookshelf.js


    【解决方案1】:
    knex.raw(`
    select ((select leave_trackers.available_leaves from leave_trackers) -
    (SELECT ((DATEDIFF('2018-06-11', '2018-06-01') + 1) - 
    (WEEK('2018-06-11') - WEEK('2018-06-01')) -
    (case when weekday('2018-06-11') = 6 then 1 else 0 end) -
    (SELECT IFNULL(sum(total), 0)
    from
    (
    select count(holidays.date) as total
    FROM holidays, leave_applications 
    WHERE holidays.date between '2018-06-01' and '2018-06-01'
    GROUP BY holiday_id) as holiday_leave 
    )
    ) as available_leaves
    FROM leaves
    group by leave_id
    ))
    `).then(res => console.log(res));
    

    如果这不起作用,我们需要更多关于问题所在的信息。

    【讨论】:

    • 谢谢@Mikael,但我没有从查询中得到回复,我认为问题在于减去中间的查询,knex.raw 不接受它
    • @akshara 在这种情况下,该查询也不应该在 SQL shell 中工作。您需要在此处添加一些代码来构建架构/填充数据库。任何其他查询是否有效?如果确实如此,您可以从查询中删除部分内容,以找出存在问题的确切位置。
    • 是的,我已经像(DATEDIFF('2018-06-11', '2018-06-01') + 1) 和其他东西一样单独完成了查询,它工作正常但是当我减去查询它不起作用时,这是我的问题:-( @Mikael
    • 谢谢! @Mikael 我找到了答案并发布了它:-)
    【解决方案2】:

    我找到了解决方案:-),

    knex.raw('((select leave_trackers.available_leave_days from leave_trackers) - (select ((DATEDIFF(?, ?) + 1) - (WEEK(?) - WEEK(?)) - (case when weekday(?) = 6 then 1 else 0 end) - (SELECT IFNULL(sum(total), 0) from (select count(holidays.date) as total FROM holidays WHERE holidays.date between ? and ? && holidays.location_id = ?) as holiday_leave )) AS total_available_days)) AS total_available_leave_days',
                                            ['2018-06-11', '2018-06-01', '2018-06-11', '2018-06-01', '2018-06-11', '2018-06-01', '2018-06-11', '1']
                                        )
    

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      相关资源
      最近更新 更多