#node.js #sequelize.js
#node.js #sequelize.js
Вопрос:
Я создаю некоторый проект, в котором я должен выполнить поиск.
я пытался использовать запрос limit и where вместе, но приоритет запроса where выше limit, поэтому сначала он выполнит запрос where, а не set limit, но я хочу сначала установить limit. пусть limit = 4 итак, сначала я хочу взять 4 записи из sql, а после этого применить запрос where
router.post("/****", async function(req, res, err) {
let limit = 4;
let searchKeyword = req.body.value;
let offset = 0;
let page = (req.body.page amp;amp; req.body.page) || 1;
let sortField = req.body.sortField;
let sortOrder = req.body.sortOrder;
if (searchKeyword) {
var searchKey = searchKeyword;
} else {
var searchKey = "";
}
tblAdmin
.findAndCountAll()
.then(data => {
let pages = Math.ceil(data.count / limit);
offset = limit * (page - 1);
tblAdmin
.findAll({
attributes: ["id", "firstName", "lastName", "status", "email"],
limit: limit,
offset: offset,
order: [sortfield || "createdAt", sortOrder || "DESC],
where: {
firstName: { [Op.like]: "%" searchKey "%" }
}
})
.then(users => {
res.status(200).json({
status: 1,
message: "Data has been retrieved",
result: users,
count: data.count,
pages: pages
});
});
})
.catch(err => {
res.status(500).json({
status: 0,
message: "Data is not retrieved from database"
});
});
});
Если я применю вышеуказанную логику, она вернет первые четыре данные из sql data, которые соответствуют условию where, но я ожидаю, что она вернет результат условия where только для первых четырех, а не для пятого
Комментарии:
1. что вы подразумеваете под пятым ?
2. Вам нужно выполнить вложенный запрос в вашем
FROM
, поэтому я не думаю, что вы сможете сделать это с sequelize, если вы не согласны использовать необработанные запросы .
Ответ №1:
Сохраняйте тот же порядок для findAndCountAll
функции. Первая функция возвращает результат в другом порядке, вторая возвращает в другом.
Ожидание начала .then
использования.
router.post("/****", async function (req, res, err) {
let limit = 4;
let searchKeyword = req.body.value;
let offset = 0;
let page = (req.body.page amp;amp; req.body.page) || 1;
let sortField = req.body.sortField;
let sortOrder = req.body.sortOrder;
if (searchKeyword) {
var searchKey = searchKeyword;
} else {
var searchKey = "";
}
const order = [sortfield || "createdAt", sortOrder || "DESC"];
offset = limit * (page - 1);
try {
let [data, users] = await Promise.all[
tblAdmin.findAndCountAll({
order
}),
tblAdmin.findAll({
attributes: ["id", "firstName", "lastName", "status", "email"],
limit: limit,
offset: offset,
order,
where: {
firstName: {
[Op.like]: "%" searchKey "%"
}
}
})
];
let pages = Math.ceil(data.count / limit);
res.status(200).json({
status: 1,
message: "Data has been retrieved",
result: users,
count: data.count,
pages: pages
});
} catch (error) {
res.status(500).json({
status: 0,
message: "Data is not retrieved from database"
});
}
});