有没有办法在一个查询中找到用户最喜爱的帖子?

问题描述:

我这样做是为了分页的所有帖子至极用户添加到他的最爱:有没有办法在一个查询中找到用户最喜爱的帖子?

$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 
)); 

有没有更有效的方法来做到这一点,或者这个喜欢它应该是什么?

感谢您的任何帮助。

+0

是的,有。你需要做一个SQL JOIN。我会给你一个答案,但我的PHP是远远生锈,做得正确。如果你没有得到答案,请问如何做一个JOIN查询,或谷歌它。 – 2011-05-02 18:14:36

+0

如果你想要一个MySQL的答案,请包括表格布局。 – Johan 2011-05-02 18:17:11

您并不需要在这里使用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') . '))' 
));