2014-05-09 27 views
0

好家伙我有一个问题选择SQL,我的数据库有3个表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 
    ) 

) 
+0

请问您是否可以更清楚的要求?新闻表在哪里? – avisheks

+0

新闻表不存在存在的文章表 – user3611170

+0

你能告诉我一些示例输出吗?或者你能想出差异词? – avisheks

回答

0

附加标签的所有文章:

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,您可以在之后进行点查询。