2017-01-15 44 views
2

參數工作,我有三個表看起來象下面這樣:GROUP_CONCAT不與笨和PHP

test_case

id project_id  requirement_id 
1  5    11,12 
2  4    12,13 
3  5    10,12 

task_categories(refenced與requirement_id test_case表)

id  name 
10  ten 
11  eleven 
12  twelve 
13  thirtien  

項目(refenced與PROJECT_ID test_case表)

id name 
4  P1   
5  P2  

現在,我想通過傳遞參數一樣PROJECT_ID = 5使用WHERE條件的查詢,並希望輸出的樣子如下:

id project_name  requirement_name 
1  P2    eleven,twelve 
3  P2    ten,twelve 

我試着在我的模型下面的代碼:

public function display($project_id) { 
    $sql = " 
     SELECT i.id as id, i.project_id as project_id, requirement_id, GROUP_CONCAT(c.name SEPARATOR '\n <br>*') as req_name, p.id as projects_id FROM test_case i, task_categories c, projects p 
     WHERE FIND_IN_SET(c.id, i.requirement_id) AND i.project_id = $project_id 
     GROUP BY i.id"; 

    $query = $this->db->query($sql); 
    return $query->result(); 
} 

回答

1

您當前的做法有問題,因爲它會導致在使用GROUP BY選擇非聚合列。這裏是一個應該工作的查詢:

SELECT t1.id, 
     COALESCE(t2.project_name, 'NA') AS project_name, 
     t1.req_name 
FROM 
(
    SELECT t.id, 
      t.project_id, 
      GROUP_CONCAT(tc.name SEPARATOR '\n <br>*') AS req_name 
    FROM test_case t 
    INNER JOIN task_categories tc 
     ON FIND_IN_SET(tc.id, t.requirement_id) > 0 
    GROUP BY t.id, t.project_id 
) t1 
LEFT JOIN projects t2 
    ON t1.project_id = t2.id 

在上面的查詢中,我加入test_casetask_categories一起在一個子查詢獲得的id所有組合,project_id,以及他們的要求清單。然後我使用另一個LEFT JOINprojects表中引入項目名稱。

+0

哦,非常感謝。它正在工作。 – user7421798