Tôi không nghĩ câu trả lời rõ ràng cho câu hỏi của bạn là có thể. Xem #1869:
Truy vấn trên mô hình/bảng tham gia thông qua hiện không khả thi.
Để trả lời câu hỏi tiêu đề, Phần tiếp theo sẽ tự động tạo truy vấn con (ví dụ: #1719), nhưng bạn không thể thực hiện truy vấn con tùy chỉnh. Tôi không có một tài liệu tham khảo có thẩm quyền cho một tiêu cực.
Dường như bảng của bạn là một cái gì đó như thế này:
EssayStats
EssayId
EssayDate
WordCount
Sau đó, bạn có thể làm một cái gì đó như thế này:
return EssayStat.findAll({
attributes: [
[sequelize.literal('((SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" DESC LIMIT 1) - (SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" ASC LIMIT 1))'), 'difference'],
'EssayId'
],
group: ['EssayId']
});
Tất cả những gì nó đang làm đang chạy hai truy vấn SELECT, lấy MAX và MIN từ các truy vấn đó sau khi đặt hàng theo biến quan tâm của bạn và sau đó lấy sự khác biệt của bạn. Điều đó sẽ cung cấp cho bạn những gì bạn quan tâm: sự khác biệt về số lượng từ giữa phiên bản mới nhất và phiên bản đầu tiên.
Bí quyết ở đây là đóng gói câu lệnh SELECT trong trường thuộc tính.
Tất nhiên, nó lộn xộn như heck và có lẽ không phải tất cả tốt hơn nhiều so với đóng hộp sequelize.query
. Nhưng nó trả lời ý chính của câu hỏi của bạn.
Một giải pháp tốt hơn có thể là không chuẩn hóa dữ liệu của bạn một số và lưu trữ "wordCountDelta" trực tiếp trong mô hình Tiểu luận của bạn. Sau đó, bạn có thể có một số afterCreate
hook để tự động cập nhật trường. Điều đó rất có thể sẽ là giải pháp nhanh nhất.
Tôi đã trả lời điều gì đó tương tự here.
Tôi không nghĩ như vậy. Việc tải xuống có thể là điều gần nhất. [Đây là một ví dụ trong đó phần tiếp theo tạo ra một truy vấn con thông qua tải háo hức, vì một 'giới hạn' nhân tạo] (https://github.com/sequelize/sequelize/issues/1719). – bishop
Tôi không biết gì về 'Sequelize.js'. Có thể soạn một cái gì đó như 'EssayStats t1 LEFT JOIN EssayStats t2 ON t1.EssayId = t2.EssayId AND t1.EssayDate
axiac