2013-11-09 47 views
0

我想要构建的表有一些问题。 该表使用一个mysql数据库,其中有由多对多表连接的多表。GROUP_CONCAT重复的值 - CI

我使用JSON代码在jQuery表中插入值。

这里是用来查询数据库中的数值模型:

function list_all() 
    { 
     $login_id = $this->session->userdata('User_id'); 
     $this->db->select('p.project_id, p.Project, p.Description, p.Status, p.Thumbnail, p.StartDate, p.EndDate, t.template_id, t.Template') 
    ->select('GROUP_CONCAT(DISTINCT v.Name SEPARATOR ",") as PeopleList, GROUP_CONCAT(DISTINCT w.asset_id SEPARATOR ",") as AssetsList', FALSE) 
    ->from('projects p') 
    ->join('assigned_projects_ppeople a', 'a.project_id = p.project_id') 
    ->join('assigned_assets_pproject w', 'w.project_id = p.project_id', 'left') 
    ->join('project_templates t', 't.template_id = p.template_id') 
    ->join('people v', 'v.people_id = a.people_id') 
    ->where('a.people_id', $login_id) 
    ->group_by('p.project_id'); 

    $query = $this->db->get(); 

     $rows = $query->result_array(); 

     //Return result to jTable 
     $jTableResult = array(); 
     $jTableResult['Result'] = "OK"; 
     $jTableResult['Records'] = $rows; 
      $result = json_encode($jTableResult); 
     return $result; 
    } 

所有值都在jQuery的表格以及上市,除了GROUP_CONCAT值将其通过资产上市资产的数量复制给人们名称列... 编辑:在GROUP_CONCAT中使用DISTINCT关键字解决问题。

但是,如果没有项目链接到项目,项目不会被加载并且不会出现在表格中。编辑:解决使用LEFT JOIN“assigned_assets_pproject”表上。

下面是带有JSON代码的表格的屏幕截图http://i.stack.imgur.com/jEj4D.png 有关信息,每个项目中只有一个用户“Michael Bonfill”。

这里是last_query的

SELECT `p`.`project_id`, `p`.`Project`, `p`.`Description`, `p`.`Status`, `p`.`Thumbnail`, `p`.`StartDate`, `p`.`EndDate`, `t`.`template_id`, `t`.`Template`, GROUP_CONCAT(v.Name SEPARATOR ", ") as PeopleList, GROUP_CONCAT(w.asset_id SEPARATOR ", ") as AssetsList 
FROM (`projects` p) 
JOIN `assigned_projects_ppeople` a ON `a`.`project_id` = `p`.`project_id` 
JOIN `assigned_assets_pproject` w ON `w`.`project_id` = `p`.`project_id` 
JOIN `project_templates` t ON `t`.`template_id` = `p`.`template_id` 
JOIN `people` v ON `v`.`people_id` = `a`.`people_id` 
WHERE `a`.`people_id` = '1' 
GROUP BY `p`.`project_id` 

,如果你想我可以导出我的数据库的SQL更多的信息()的输出。 谢谢!

+0

你的活动记录代码是一个烂摊子......你设置好一切,然后将其设置again..did你忘了一个get()?使用echo $ this-> db-> last_query()来查看你的查询是什么 – jmadsen

+0

是的我知道我可以使用方法链接来简化活动记录......我试图用它的FROM和JOIN删除第二个GROUP_CONCAT,没有所有工作正常,所以错误会从这里来... – mickaelb91

+0

不,这不是我说的。你的代码是一团糟 - 我们通常不会使用两个from()表达式,但你看起来并不像你正确地加入它们,而是在你得到多行的地方。使用ONE from()子句,然后加入(),然后你就可以正确地看到你的sql – jmadsen

回答

1

使用DISTINCT 关键字GROUP_CONCAT(DISTINCT v.Name SEPARATOR ",")

+0

我相信DISTINCT默认是GROUP_CONCAT关键字,每次我们使用GROUP_CONCAT时都不需要编写它。对我来说一个很大的错误:/谢谢,一切正常! – mickaelb91

+1

不幸的是,我意识到问题没有完全解决......如果我没有任何资产链接到一个项目,该项目不会出现在表中。哪里有问题 ? – mickaelb91

+0

尝试** LEFT JOIN **为assigned_assets_pproject加入 – Aurel