在 Codeigniter 中将标签表连接到帖子表

发布于 2024-12-10 06:50:37 字数 823 浏览 0 评论 0原文

我需要一些帮助来检索属于特定标签组的帖子。我正在使用 Codeigniter 和 MySQL。

我的表格如下所示:

posts - postid、标题、日期等

tags - tagid、tag

post_tags - postid、tagid

这是函数我在我的模型中使用:

function get_posts($tags) {

    $this->db->select('*');
    $this->db->from('posts');
    $this->db->order_by('date', 'DESC');
    $this->db->join('post_tags', 'posts.postid = post_tags.postid');
    $this->db->join('tags', 'post_tags.tagid = tags.tagid');
    $this->db->where_in('tags.tag', $tags);
    $q = $this->db->get();
    return $q->result();
}

到目前为止,查询正在按照我想要的方式工作并返回所有正确的帖子。

但是,在循环结果并设置特定帖子信息时,每个帖子仅列出第一个标签

是否可以重新构造查询,以便每个帖子都包含与原始 $tags 数组匹配的所有标签?

谢谢!

I need some help retrieving posts that belong to a specific group of tags. I am working with Codeigniter and MySQL.

My tables look like this:

posts - postid, title, date, etc

tags - tagid, tag

post_tags - postid, tagid

This is the function I am using in my model:

function get_posts($tags) {

    $this->db->select('*');
    $this->db->from('posts');
    $this->db->order_by('date', 'DESC');
    $this->db->join('post_tags', 'posts.postid = post_tags.postid');
    $this->db->join('tags', 'post_tags.tagid = tags.tagid');
    $this->db->where_in('tags.tag', $tags);
    $q = $this->db->get();
    return $q->result();
}

So far, the query is working the way I want and returning all the proper posts.

However, while looping through the result and setting up the specific post information, only the first tag is being listed per post.

Is it possible to restucture the query so that each post includes all the tags that match the original $tags array?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我不吻晚风 2024-12-17 06:50:37

我没有对此进行测试,但我认为您需要向查询添加联接类型:

function get_posts($tags) {
    $this->db->select('*');
    $this->db->from('posts');
    $this->db->order_by('date', 'DESC');
    $this->db->join('post_tags', 'posts.postid = post_tags.postid');

    // add the "right" keyword to produce a RIGHT JOIN
    $this->db->join('tags', 'post_tags.tagid = tags.tagid', 'right'); 

    $this->db->where_in('tags.tag', $tags);
    $q = $this->db->get();
    return $q->result();
}

http: //codeigniter.com/user_guide/database/active_record.html

I've not tested this, but I think you need to add a join type to the query:

function get_posts($tags) {
    $this->db->select('*');
    $this->db->from('posts');
    $this->db->order_by('date', 'DESC');
    $this->db->join('post_tags', 'posts.postid = post_tags.postid');

    // add the "right" keyword to produce a RIGHT JOIN
    $this->db->join('tags', 'post_tags.tagid = tags.tagid', 'right'); 

    $this->db->where_in('tags.tag', $tags);
    $q = $this->db->get();
    return $q->result();
}

http://codeigniter.com/user_guide/database/active_record.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文