我在nodeJ中使用sequelize,代码如下:
Time_Sheet_Details.findAll({
include: [
{
model: timesheetNotesSubcon,
required: false,
attributes:["note","file_name", "id", "working_hrs", "timestamp", "has_screenshot", "notes_category"]
},
{
model: Timesheet,
attributes:["id","leads_id","userid"],
include:[
{
model: Lead_Info, attributes:["id","fname","lname","email","hiring_coordinator_id","status"],
where: { hiring_coordinator_id : 326},
include:[{
model: adminInfoSchema,
required: false,
attributes:["admin_id","admin_fname", "admin_lname", "admin_email", "signature_contact_nos", "signature_company"],
}]
},
{model:Personal_Info,attributes:["userid","fname","lname","email"]}
],
}],
where: {
reference_date: filters.reference_date
},
order:[
["id","DESC"]
],
offset:((1-1)*30),
limit : 30,
}).then(function(foundObject){
willFulfillDeferred.resolve(foundObject);
});
查询结果为:
SELECT `timesheet_details`.*, `timesheet_notes_subcons`.`note` AS
`timesheet_notes_subcons.note`, `timesheet_notes_subcons`.`file_name` AS
`timesheet_notes_subcons.file_name`, `timesheet_notes_subcons`.`id` AS
`timesheet_notes_subcons.id`, `timesheet_notes_subcons`.`working_hrs` AS
`timesheet_notes_subcons.working_hrs`, `timesheet_notes_subcons`.`timestamp` AS
`timesheet_notes_subcons.timestamp`, `timesheet_notes_subcons`.`has_screenshot` AS
`timesheet_notes_subcons.has_screenshot`,
`timesheet_notes_subcons`.`notes_category` AS
`timesheet_notes_subcons.notes_category`, `timesheet.lead`.`id` AS
`timesheet.lead.id`, `timesheet.lead`.`fname` AS `timesheet.lead.fname`,
`timesheet.lead`.`lname` AS `timesheet.lead.lname`,
`timesheet.lead`.`email` AS `timesheet.lead.email`,
`timesheet.lead`.`hiring_coordinator_id` AS
`timesheet.lead.hiring_coordinator_id`, `timesheet.lead`.`status` AS
`timesheet.lead.status`, `timesheet.lead.admin`.`admin_id` AS
`timesheet.lead.admin.admin_id`, `timesheet.lead.admin`.`admin_fname` AS
`timesheet.lead.admin.admin_fname`, `timesheet.lead.admin`.`admin_lname` AS
`timesheet.lead.admin.admin_lname`, `timesheet.lead.admin`.`admin_email` AS
`timesheet.lead.admin.admin_email`,
`timesheet.lead.admin`.`signature_contact_nos` AS
`timesheet.lead.admin.signature_contact_nos`,
`timesheet.lead.admin`.`signature_company` AS
`timesheet.lead.admin.signature_company`, `timesheet.personal`.`userid` AS
`timesheet.personal.userid`, `timesheet.personal`.`fname` AS
`timesheet.personal.fname`, `timesheet.personal`.`lname` AS
`timesheet.personal.lname`, `timesheet.personal`.`email` AS
`timesheet.personal.email` FROM (SELECT `timesheet_details`.`id`,
`timesheet_details`.`timesheet_id`, `timesheet_details`.`day`,
`timesheet_details`.`total_hrs`, `timesheet_details`.`adj_hrs`,
`timesheet_details`.`regular_rostered`, `timesheet_details`.`hrs_charged_to_client`,
`timesheet_details`.`diff_charged_to_client`,
`timesheet_details`.`hrs_to_be_subcon`,
`timesheet_details`.`diff_paid_vs_adj_hrs`, `timesheet_details`.`status`,
`timesheet_details`.`reference_date`, `timesheet`.`id` AS `timesheet.id`,
`timesheet`.`leads_id` AS `timesheet.leads_id`, `timesheet`.`userid` AS
`timesheet.userid` FROM `timesheet_details` AS `timesheet_details`
LEFT OUTER JOIN `timesheet` AS `timesheet`
ON `timesheet_details`.`timesheet_id` = `timesheet`.`id`
WHERE (`timesheet_details`.`reference_date` >= '2016-04-23 16:00:00'
AND `timesheet_details`.`reference_date` < '2017-05-02 15:59:59')
ORDER BY `timesheet_details`.`id` DESC LIMIT 0, 30) AS
`timesheet_details` LEFT OUTER JOIN `timesheet_notes_subcon` AS
`timesheet_notes_subcons` ON `timesheet_details`.`id` =
`timesheet_notes_subcons`.`timesheet_details_id`
INNER JOIN `leads` AS `timesheet.lead` ON `timesheet.leads_id` =
`timesheet.lead`.`id` AND `timesheet.lead`.`hiring_coordinator_id` = 326
LEFT OUTER JOIN `admin` AS `timesheet.lead.admin` ON
`timesheet.lead`.`hiring_coordinator_id` =
`timesheet.lead.admin`.`admin_id`
LEFT OUTER JOIN `personal` AS `timesheet.personal` ON `timesheet.userid`
= `timesheet.personal`.`userid` ORDER BY `timesheet_details`.`id` DESC;
正如您所看到的,LIMIT 0, 30
不在查询的末尾。这对我来说是个问题,因为该查询将不返回任何内容,并且限制和偏移量应该在查询的末尾,如下所示:
SELECT `timesheet_details`.*, `timesheet_notes_subcons`.`note` AS
`timesheet_notes_subcons.note`, `timesheet_notes_subcons`.`file_name` AS
`timesheet_notes_subcons.file_name`, `timesheet_notes_subcons`.`id` AS
`timesheet_notes_subcons.id`, `timesheet_notes_subcons`.`working_hrs` AS
`timesheet_notes_subcons.working_hrs`,
`timesheet_notes_subcons`.`timestamp` AS
`timesheet_notes_subcons.timestamp`,
`timesheet_notes_subcons`.`has_screenshot` AS
`timesheet_notes_subcons.has_screenshot`,
`timesheet_notes_subcons`.`notes_category` AS
`timesheet_notes_subcons.notes_category`, `timesheet.lead`.`id` AS
`timesheet.lead.id`, `timesheet.lead`.`fname` AS `timesheet.lead.fname`,
`timesheet.lead`.`lname` AS `timesheet.lead.lname`,
`timesheet.lead`.`email` AS `timesheet.lead.email`,
`timesheet.lead`.`hiring_coordinator_id` AS
`timesheet.lead.hiring_coordinator_id`, `timesheet.lead`.`status` AS
`timesheet.lead.status`, `timesheet.lead.admin`.`admin_id` AS
`timesheet.lead.admin.admin_id`, `timesheet.lead.admin`.`admin_fname` AS
`timesheet.lead.admin.admin_fname`, `timesheet.lead.admin`.`admin_lname`
AS `timesheet.lead.admin.admin_lname`,
`timesheet.lead.admin`.`admin_email` AS
`timesheet.lead.admin.admin_email`,
`timesheet.lead.admin`.`signature_contact_nos` AS
`timesheet.lead.admin.signature_contact_nos`,
`timesheet.lead.admin`.`signature_company` AS
`timesheet.lead.admin.signature_company`, `timesheet.personal`.`userid`
AS `timesheet.personal.userid`, `timesheet.personal`.`fname` AS
`timesheet.personal.fname`, `timesheet.personal`.`lname` AS
`timesheet.personal.lname`, `timesheet.personal`.`email` AS
`timesheet.personal.email` FROM (SELECT `timesheet_details`.`id`,
`timesheet_details`.`timesheet_id`, `timesheet_details`.`day`,
`timesheet_details`.`total_hrs`, `timesheet_details`.`adj_hrs`,
`timesheet_details`.`regular_rostered`,
`timesheet_details`.`hrs_charged_to_client`,
`timesheet_details`.`diff_charged_to_client`,
`timesheet_details`.`hrs_to_be_subcon`,
`timesheet_details`.`diff_paid_vs_adj_hrs`,
`timesheet_details`.`status`, `timesheet_details`.`reference_date`,
`timesheet`.`id` AS `timesheet.id`, `timesheet`.`leads_id` AS
`timesheet.leads_id`, `timesheet`.`userid` AS `timesheet.userid`
FROM `timesheet_details` AS `timesheet_details`
LEFT OUTER JOIN `timesheet` AS `timesheet` ON
`timesheet_details`.`timesheet_id` = `timesheet`.`id`
WHERE (`timesheet_details`.`reference_date` >= '2016-04-23 16:00:00'
AND `timesheet_details`.`reference_date` < '2017-05-02 15:59:59')
ORDER BY `timesheet_details`.`id` DESC) AS `timesheet_details`
LEFT OUTER JOIN `timesheet_notes_subcon` AS `timesheet_notes_subcons` ON
`timesheet_details`.`id` =
`timesheet_notes_subcons`.`timesheet_details_id` INNER JOIN `leads` AS
`timesheet.lead` ON `timesheet.leads_id` = `timesheet.lead`.`id` AND
`timesheet.lead`.`hiring_coordinator_id` = 326 LEFT OUTER JOIN `admin` AS
`timesheet.lead.admin` ON `timesheet.lead`.`hiring_coordinator_id` =
`timesheet.lead.admin`.`admin_id` LEFT OUTER JOIN `personal` AS
`timesheet.personal` ON `timesheet.userid` =
`timesheet.personal`.`userid` ORDER BY `timesheet_details`.`id` DESC
LIMIT 0, 30;
我的代码中有什么地方做错了吗?我是否放错了订单和限价?
5条答案
按热度按时间ghhaqwfi1#
找到了我的问题的答案,我只需要添加
subQuery = false
,这样限制和偏移量就不会被计算到子查询中。而且偏移量和限制也在查询的末尾。9jyewag02#
需要在includes之前放置一个order和where子句。
结果查询将被
如果要将订单放入“包含”,则需要将订单放入“包含”部分
有关详细信息,请查看“分页/限制和排序”
已更新嵌套的包含、限制和顺序
现在将此选项传递给模型参数
这将是生成的查询
jum4pzuy3#
得到了同样的情况,另一种方法是将数组传递给limit。
wqsoz72f4#
在Node.js中使用sequilize进行字段的限制、偏移、投影和全文搜索
4ngedf3f5#
尝试在您请求中添加$limit参数,sequelize将自动使用该参数,例如:“您可以在本地服务器上使用此服务器。”