【问题标题】:Select sql from 3 tables one to many从3个表中一对多选择sql
【发布时间】:2014-05-09 07:59:06
【问题描述】:

大家好,我有一个问题,我的数据库有 3 个表

tags(id,name);

articles(id,title,smallimage,date,views);

tags_in_news(id,news_id,tag_id);

现在我希望所有 article.titles 都附加到一个标签上。
我试过了,但没有太大帮助: 我的功能:

public function get($obj_id)
{
    $this->load->database();
    $news = $this->db->query("SELECT 
                              t.name,
                              t.id,
                              a.title,
                              a.date,
                              a.views,
                              a.smallimage,
                              tin.id,
                              group_concat(a.title)
                              from tags_in_news tin
                              inner join tags t on t.id = tin.tag_id
                              inner join articles a on a.id = tin.news_id
                              and t.id = ?
                              group by t.id",array($obj_id));
    if ($news->num_rows())
    {
        $news = $news->result_array();
    }   
    else
    {
        $news = NULL;
    }

    return $news;
}
Array
(
[0] => Array
    (
        [name] => new tag
        [id] => 57
        [group_concat(a.title,a.views)] => Article1 52,Article3 51,Article3 56
    )

)

【问题讨论】:

  • 你能更清楚的要求吗?以及新闻表在哪里?
  • News 表不存在,Articles 表存在
  • 你能给我看一些示例输出吗?或者你能想出不同的词吗?
  • 您是希望将所有文章附加到一个标签上,还是将所有标签附加到一个文章上?
  • 所有文章到标签

标签: mysql sql codeigniter codeigniter-2


【解决方案1】:

所有附加到标签的文章:

SELECT 
t.name tag,GROUP_CONCAT(DISTINCT a.title) titles
FROM tags_in_news tin
INNER JOIN tags t ON t.id = tin.tag_id
INNER JOIN articles a ON a.id = tin.news_id
GROUP BY t.id;

这里要注意的一点是 GROUP_CONCAT 允许的默认长度是 1024 个字符。
因此,建议您将 id(如果您怀疑您的连接值可能超出限制)作为逗号分隔值获取,一旦您获得 id,您就可以在之后进行点查询。

【讨论】:

    猜你喜欢
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多