2017-01-15 4 views
2

Ich habe drei Tabellen aussehen wie unten:GROUP_CONCAT arbeitet nicht mit dem Parameter in codeigniter und PHP

test_case

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

task_categories (mit test_case Tisch mit requirement_id refenced)

id  name 
10  ten 
11  eleven 
12  twelve 
13  thirtien  

Projekte (mit test_case Tabelle mit project_id refenced)

id name 
4  P1   
5  P2  

Nun möchte ich mit dem Zustand eine Abfrage machen, indem Parameter wie project_id = 5 und wollen, dass die Ausgabe aussehen wie unten:

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

Ich habe versucht, der folgende Code in meinem Modell:

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(); 
} 

Antwort

1

Ihr aktueller Ansatz hat ein Problem, weil es bei der Auswahl nicht aggregierten Spalten führt, während GROUP BY verwenden. Hier ist eine Abfrage, die funktionieren soll:

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 

In der obigen Abfrage schließe ich mich test_case und task_categories zusammen in einer Unterabfrage alle Kombinationen von id zu erhalten, project_id und ihre Bedarfsliste. Dann benutze ich einen anderen LEFT JOIN, um den Projektnamen aus der projects Tabelle einzubringen.

+0

oh vielen dank. es funktioniert. – user7421798