1

作成したいテーブルに問題があります。このテーブルは、多対多テーブルによってリンクされた複数のテーブルを持つ mysql データベースを使用します。

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 キーワードを使用して問題を解決しました。

ただし、プロジェクトにリンクされたエントリ アセットがない場合、プロジェクトは読み込まれず、テーブルに表示されません。編集:「assigned_assets_pproject」テーブルで LEFT JOIN を使用して解決しました。

JSON コードを含むテーブルのスクリーンショットを次に示しますhttp://i.stack.imgur.com/jEj4D.png 参考までに、各プロジェクトには "Michael Bonfill" というユーザーが 1 人しかいません。

これが 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 をエクスポートして詳細を確認できます。ありがとうございました !

4

1 に答える 1

2

そのようなDISTINCTキーワードを使用するGROUP_CONCAT(DISTINCT v.Name SEPARATOR ",")

于 2013-11-10T11:44:17.160 に答える