有没有办法在一个查询中找到用户最喜爱的帖子?
问题描述:
我这样做是为了分页的所有帖子至极用户添加到他的最爱:有没有办法在一个查询中找到用户最喜爱的帖子?
$favs = $this->Favorite->find('all', array(
'fields' => array(
'Favorite.post_id'
),
'conditions' => array(
'Favorite.user_id' => $this->Auth->user('id')
)
));
$favs = Set::format($favs, '{0}', array('{n}.Favorite.post_id'));
$posts = $this->paginate('Post', array(
'Post.id' => $favs
));
有没有更有效的方法来做到这一点,或者这个喜欢它应该是什么?
感谢您的任何帮助。
答
您并不需要在这里使用find
方法,因为paginate
的工作方式与find
几乎相同,只是对结果进行分页除外。
所以你可以通过只使用paginate
方法做你想做的事情。
我怀疑这会显着提高性能,但它会让你的代码更简单一些。
答
感谢您的帖子,但我昨天发现了一个简单的解决方案。我希望这对某人有帮助
$posts = $this->paginate('Post', array(
'Post.id IN((SELECT `Favorite` . `post_id` FROM `favorites` AS `Favorite` WHERE `Favorite`.`user_id` = ' . $this->Auth->user('id') . '))'
));
是的,有。你需要做一个SQL JOIN。我会给你一个答案,但我的PHP是远远生锈,做得正确。如果你没有得到答案,请问如何做一个JOIN查询,或谷歌它。 – 2011-05-02 18:14:36
如果你想要一个MySQL的答案,请包括表格布局。 – Johan 2011-05-02 18:17:11