因此,有 User
模型和 Item
模型。这是一个多对多的关系:一个项目可以属于多个用户,一个用户可以拥有多个项目。因此,就有了 UserItemRel
模型。
总结:
item
id
name
date_created
date_updated
user
id
email
password
date_created
date_updated
user_item_rel
user_id
item_id
date_created
在切换到 Yii2 之前,我的查询是这样的:
SELECT COUNT(UIR.`user_id`) as `favourited`, IT.`id`, IT.`name`, CA.`name` as `category`
FROM `user_item_rel` UIR
LEFT JOIN `item` IT ON UIR.`item_id` = IT.`id`
LEFT JOIN `category_item` CI ON UIR.`item_id` = CI.`item_id`
LEFT JOIN `category` CA ON CI.`category_id` = CA.`id`
WHERE UIR.`date_created` >= (SYSDATE() - INTERVAL 3 YEAR)
GROUP BY UIR.`item_id`
ORDER BY
`favourited` DESC
LIMIT 20
我用过 yii2-enhanced-gii生成模型的扩展。
我想显示过去 48 小时内最喜欢的 20 个项目及其数量。我正在从 Yii1.1 迁移,到目前为止已经很顺利了,我想不通。
我找到了
$this->hasMany(UserItemRel::className(), ['id' => 'user_id'])
->viaTable('user_item_rel', ['id' => 'item_id'], function ($query) {
$query->andWhere(['date_created < INTERVAL 2 DAY'])
->orderBy(['COUNT(*)' => SORT_DESC]);
});
}
但是如何正确使用呢?
最佳答案
查询类似于下面的内容。我会尝试运行 native 查询,而不是尝试找出如何使用 orm 完成此操作。
SELECT item_id, item.name, count(*) favorite
FROM user_item_rel
LEFT JOIN user ON user.id = user_item_rel.user_id
LEFT JOIN item ON item.id = user_item_rel.item_id
WHERE user_item_rel.date_created >= (sysdate() - interval 2 DAY)
GROUP BY item_id, name
ORDER BY favorite DESC
LIMIT 20
关于php - 如何从另一个表中获取最喜欢的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156761/