【问题标题】:Complex Yii SQL statement复杂的 Yii SQL 语句
【发布时间】:2013-06-04 15:16:35
【问题描述】:

我是 Yii 的新手,我很难将 SQL 查询翻译成 Yii Active Record 语言或使用查询生成器。

我有 3 张桌子: - 帖子:id,文本 - 标签:身份证,姓名 - Post_Tag : id_post, id_tag

我想要做的是能够选择具有用户选择的所有标签的帖子: 这是有效的 SQL 语句,我想翻译成 Yii 语言:

SELECT * FROM Post p INNER JOIN tags pt ON p.id=pt.post_id WHERE pt.tag_id in(10, 13) group by pt.post_id having count(distinct pt.tag_id) > 1;

有人可以帮我吗?提前致谢!

【问题讨论】:

标签: sql activerecord yii


【解决方案1】:

要获取您的查询,您应该能够执行以下操作:

$criteria = new CDbCriteria(); 
$criteria->join = "INNER JOIN tags pt ON t.id=pt.post_id"; 
$criteria->addInCondition("pt.tag_id", array(10,13));
$criteria->group = "t.id";
$criteria->having = "COUNT(DISTINCT pt.tag_id) > 1";

$posts = Posts::model()->findAll($criteria);

如果您希望所有帖子都带有特定标签,您可以使用带有某些关系的标签模型。

在您的标签模型文件中:

public function relations()
{   
    return array(
        'postTags' => array(self::HAS_MANY, 'PostsTags', 'tag_id'),
        'posts' => array(self::HAS_MANY, 'Posts', array('post_id'=>'id'), 'through'=>'postTags'),
        //Other relations here
    );
}

然后你可以得到这样一个标签的帖子:

$tag = Tags::model()->findByPk(10);
$posts = $tag->posts;

如果要过滤,可以向关系添加条件

【讨论】:

  • 非常感谢,感谢您的解释,我终于做到了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多