我有一个mysql
数据库,其中包含视频库的元数据。我希望能够在我的UI上更改视频的元数据,然后使用更新版本保存新实例,但希望将旧版本保存在我的数据库中。然后,当我使用sequelize.findAll
时,我只想返回最新版本。这是我的数据库架构
CREATE TABLE `ututs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`aem_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`locale` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`status` int(11) NOT NULL,
`version` int(11) NOT NULL DEFAULT 0,
`metadata` json NOT NULL,
`validated` json NOT NULL,
`created_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如果我使用mySQLworkbench
,我可以进行此查询
SELECT ANY_VALUE(id), aem_id, ANY_VALUE(`locale`), ANY_VALUE(status), MAX(version), ANY_VALUE(metadata), ANY_VALUE(validated), ANY_VALUE(created_on), ANY_VALUE(modified_on) FROM ututs AS Utut WHERE Utut.locale = 'en_US' AND Utut.status IN (1, 2) GROUP BY aem_id;
并按预期返回数据。但是,当我尝试使用Sequelize进行通话时:
UtutModel.findAll({
attributes: [
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`id`)),
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`aem_id`)),
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`locale`)),
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`status`)),
Sequelize.fn(`MAX`, Sequelize.col(`version`)),
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`metadata`)),
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`validated`)),
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`created_on`)),
Sequelize.fn(`ANY_VALUE`, Sequelize.col(`modified_on`))
],
group: ['aem_id'],
where: UtutModel.buildWhere(req.query)
我得到了我希望返回的正确条目数,但是,它们缺少每列的数据。
Utut {
dataValues: {},
_previousDataValues: {},
_changed: {},
_modelOptions: {
timestamps: false,
validate: {},
freezeTableName: false,
underscored: true,
underscoredAll: false,
paranoid: false,
rejectOnEmpty: false,
whereCollection: [Object],
schema: null,
schemaDelimiter: '',
defaultScope: {},
scopes: [],
indexes: [],
name: [Object],
omitNull: false,
tableName: 'ututs',
sequelize: [Object],
hooks: {},
uniqueKeys: {}
},
_options: {
isNewRecord: false,
_schema: null,
_schemaDelimiter: '',
raw: true,
attributes: [Array] },
__eagerlyLoadedAssociations: [],
isNewRecord: false
},
有没有办法在续集调用中使用GROUP BY
来返回我不使用的数据?
另外,如果我放弃ANY_VALUE
fns,我会收到此错误
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'utut.Utut.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by