2014-05-09 31 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,您可以在之後進行點查詢。