Sequelize מיון לפי נתוני טבלה אחרת
-
יש לי טבלה של כרטיסים Tickets, וטבלה של לוגים Log
כל פעם שמשתמש פותח כרטיס, זה נרשם ללוג.
אני רוצה לחפש את הכרטיסים שלא פתחו אותם בכלל, או שפתחו הכי קצת, בשאילתה Mysql הייתי כותב כך:SELECT *, ( SELECT COUNT(*) FROM Log WHERE Log.TicketId = Tickets.ID ) AS openCount FROM Tickets ORDER BY openCount;
השאלה איך אני עושה את זה בSequelize, יש לי ענין מיוחד לעשות את זה דוקא שם בגלל תנאים מורכבים שכבר בנויים בו.
הכיוון שניסיתי הוא בערך כך:TicketsModel.findAll({ include: [ { model: Log, as: 'Log', attributes: [ [Sequelize.fn('COUNT'), 'openCount'] ] } ], order: ['openCount'] })
אבל זה כמובן לא תקין, לא מצאתי תיעוד איך אפשר לעשות תת שאילתה בתוך השאילתה הראשית.
האם זה אפשרי? -
@יוסף-בן-שמעון
בשביל לא נפתחו כלל הייתי כותב left join עם where is null.
אולי זה מקבילה נכונה בsequlize
https://stackoverflow.com/questions/43122077/left-excluding-join-in-sequelize
בשביל מיון לפי ספירת הבנים גם לא הייתי עושה תת שאילתה בSQL אלא groupby עם count, אני רואה את זה
https://stackoverflow.com/a/37817966/1271037
בשביל לכלול בספירה כאלה עם 0 צריך left join שזה אומר בsequelize להגדיר require לfalse. -
@dovid תודה!
רק למען התיעוד לבאים אחרי, יש גם אפשרות לסאב שאילתות בצורה פשוטה:
https://sequelize.org/master/manual/sub-queries.html