我正在构建一个书评应用程序。
在Review模型中,我有book_id和几个字段,如author_rating和/或scary_rating。
在Book模型中,我有一个search()函数,我想用它来搜索具有某些特征的书籍,例如5以上的author_rating。
实现这一目标的最佳方法是什么?我知道这些可能是错误的,但我可以将属性(author_rating,scary_rating等)添加到书模型中,并在每次提交评论时更新它们(平均值);或者,我可以运行一个每隔一段时间更新这些字段的cron任务。
但是,有没有更好的方法可以查询Book和Review模型来提出书籍并满足通过查看评论数据库定义的某些标准?
这有意义吗?
答案 0 :(得分:1)
you could use union, to combine two queries!!!
query 1......
union
query 2.....
order by ratings LIMIT 1
在这种格式中,如果你想要现实生活的例子,那么我愿意给你一个,
SELECT
u.username, u.picture,m.id, m.user_note, m.reply_id, m.reply_name, m.dt
FROM
relationships r,
notes m,
user u
WHERE
m.user_id = r.leader
AND
r.leader = u.user_id
AND
r.listener = '$user_id'
UNION
select username, picture,id, user_note, reply_id, reply_name, dt
from user u, notes b
where u.user_id = b.user_id
and
b.user_id ='$user_id'
ORDER BY dt DESC LIMIT 10";
答案 1 :(得分:0)
听起来你有一堆评论,你想在有人搜索时动态平均它们,这是正确的吗?如果是这样,我认为将平均评级保存为Book模型中的字段可能会更好。
我之所以这样说是因为您的应用可能会比保存评论更多地进行搜索,而且快速返回搜索可能比快速保存的评价更为重要。
但是,如果要动态计算这些平均值,可以使用MySQL的AVG()函数。请查看此SO帖子,以获取我认为非常接近您的情况的示例:
MySQL - Can I combine these 2 SQL statements? Combine JOIN and AVG?
另外,在这种情况下我可能只是编写SQL并将其粘贴到query()
中,而不是试图与Cake的ORM语法搏斗: