반응형
위치
와 센서
라는 두 개의 테이블이 있습니다. sensors
의 각 항목에는 위치
를 가리키는 외래 키가 있습니다. Sequelize를 사용하여 locations
의 모든 항목과 locations
의 각 항목과 연결된 sensor
의 총 항목 수를 가져 오려면 어떻게해야합니까?
원시 SQL :
SELECT
`locations`.*,
COUNT(`sensors`.`id`) AS `sensorCount`
FROM `locations`
JOIN `sensors` ON `sensors`.`location`=`locations`.`id`;
GROUP BY `locations`.`id`;
모델 :
module.exports = function(sequelize, DataTypes) {
var Location = sequelize.define("Location", {
id: {
type: DataTypes.INTEGER.UNSIGNED,
primaryKey: true
},
name: DataTypes.STRING(255)
}, {
classMethods: {
associate: function(models) {
Location.hasMany(models.Sensor, {
foreignKey: "location"
});
}
}
});
return Location;
};
module.exports = function(sequelize, DataTypes) {
var Sensor = sequelize.define("Sensor", {
id: {
type: DataTypes.INTEGER.UNSIGNED,
primaryKey: true
},
name: DataTypes.STRING(255),
type: {
type: DataTypes.INTEGER.UNSIGNED,
references: {
model: "sensor_types",
key: "id"
}
},
location: {
type: DataTypes.INTEGER.UNSIGNED,
references: {
model: "locations",
key: "id"
}
}
}, {
classMethods: {
associate: function(models) {
Sensor.belongsTo(models.Location, {
foreignKey: "location"
});
Sensor.belongsTo(models.SensorType, {
foreignKey: "type"
});
}
}
});
return Sensor;
};
해결 방법
COUNT
에 대해 include ()
및 sequelize.fn ()
과 함께 findAll ()
을 사용합니다.
Location.findAll({
attributes: {
include: [[Sequelize.fn("COUNT", Sequelize.col("sensors.id")), "sensorCount"]]
},
include: [{
model: Sensor, attributes: []
}]
});
또는 그룹
도 추가해야 할 수 있습니다.
Location.findAll({
attributes: {
include: [[Sequelize.fn("COUNT", Sequelize.col("sensors.id")), "sensorCount"]]
},
include: [{
model: Sensor, attributes: []
}],
group: ['Location.id']
})
참조 페이지 https://stackoverflow.com/questions/37817808
반응형
'MySql' 카테고리의 다른 글
MySQL Can't connect sequel pro with mysql (0) | 2020.11.06 |
---|---|
MySQL Java Long to MySql (0) | 2020.11.06 |
MySQL mysql은 알파벳 순서로 테이블 열 이름을 가져옵니다. (0) | 2020.11.06 |
MySQL 원격 MySQL 서버에 연결할 수 없음 (10061) (0) | 2020.11.05 |
MySQL mysql 카운트 기능을 표시합니까? (0) | 2020.11.05 |
댓글