【问题标题】:select only matching value in sql with codeigniter使用codeigniter仅选择sql中的匹配值
【发布时间】:2017-08-02 12:22:36
【问题描述】:

我在 mysql 中还有 6 个表,每个字段都有一个唯一字段“works_id”,我在这些表中输入数据。我只想匹配它显示的值,但它需要 16 行。假设在工人姓名字段中,它显示了两个重复 8 次的姓名,但我只想要两个姓名一次。它可能需要两行。但它怎么可能。我的餐桌展示:

系列 作品 ID 作品日期 基础设施名称 系统名称 作品类型 供应商名称 工人名称 1 1016 2017-03-12 服务器 JoinBDApps 故障排除 Vintage IT Md Rajaon 2 1016 2017-03-12 服务器 JoinBDApps 软件升级 Vintage IT Md Rajaon 3 1016 2017-03-12 网络 JoinBDApps 故障排除 Vintage IT Md Rajaon 4 1016 2017-03-12 网络 JoinBDApps 软件升级 Vintage IT Md Rajaon 5 1016 2017-03-12 服务器 CMH 故障排除 Vintage IT Md Rajaon 6 1016 2017-03-12 服务器 CMH 软件升级 Vintage IT Md Rajaon 7 1016 2017-03-12 网络 CMH 故障排除 Vintage IT Md Rajaon 8 1016 2017-03-12 网络 CMH 软件升级 Vintage IT Md Rajaon 9 1016 2017-03-12 服务器 JoinBDApps 故障排除 GP IT Md Forkan 10 1016 2017-03-12 服务器 JoinBDApps 软件升级 GP IT Md Forkan 11 1016 2017-03-12 网络 JoinBDApps 故障排除 GP IT Md Forkan 12 1016 2017-03-12 网络 JoinBDApps 软件升级 GP IT Md Forkan 13 1016 2017-03-12 服务器 CMH 故障排除 GP IT Md Forkan 14 1016 2017-03-12 服务器 CMH 软件升级 GP IT Md Forkan 15 1016 2017-03-12 网络 CMH 故障排除 GP IT Md Forkan 16 1016 2017-03-12 网络 CMH 软件升级 GP IT Md Forkan

但我想要:

系列 作品 ID 作品日期 基础设施名称 系统名称 作品类型 供应商名称 工人名称 1 1016 2017-03-12 服务器 JoinBDApps 故障排除 Vintage IT Md Rajaon 网络 CMH 软件升级 GP IT Md Forkan

我的 Codeigniter 模型是:

$this->db->select('trxn_tbl.works_id, trxn_tbl.works_date, infrashtructure_txn_info.infrashtructure_name, apps_txn_tbl.apps_name,works_type_txn_tbl.works_type, workers_tbl.vendor_id, workers_tbl.name'); $this->db->from('infrashtructure_txn_info'); $this->db->join('workers_tbl', 'trxn_tbl.works_id = workers_tbl.works_id'); $this->db->join('works_type_txn_tbl', 'trxn_tbl.works_id =works_type_txn_tbl.works_id'); $this->db->join('infrashtructure_txn_info', 'trxn_tbl.works_id = infrashtructure_txn_info.works_id'); $this->db->join('apps_txn_tbl', 'trxn_tbl.works_id = apps_txn_tbl.works_id'); $query = $this->db->get(); 返回$查询->结果();

请任何人帮助我...

【问题讨论】:

    标签: php jquery mysql codeigniter


    【解决方案1】:

    您应该使用 GROUP BY 来聚合行:

    $this->db->group_by(array('trxn_tbl.works_id', 'infrashtructure_txn_info.infrashtructure_name')); 
    

    试试这是否可行:

    $this->db->select('trxn_tbl.works_id, trxn_tbl.works_date, infrashtructure_txn_info.infrashtructure_name, apps_txn_tbl.apps_name, works_type_txn_tbl.works_type, workers_tbl.vendor_id, workers_tbl.name');
    $this->db->from('infrashtructure_txn_info');
    $this->db->join('workers_tbl', 'trxn_tbl.works_id = workers_tbl.works_id');
    $this->db->join('works_type_txn_tbl', 'trxn_tbl.works_id = works_type_txn_tbl.works_id');
    $this->db->join('infrashtructure_txn_info', 'trxn_tbl.works_id = infrashtructure_txn_info.works_id');
    $this->db->join('apps_txn_tbl', 'trxn_tbl.works_id = apps_txn_tbl.works_id');
    
    $this->db->group_by(array('trxn_tbl.works_id', 'infrashtructure_txn_info.infrashtructure_name'));
    
    $query = $this->db->get();
    
    return $query->result();
    

    编辑:如果您遇到任何与 group_by 相关的错误,请尝试按您选择的所有命名列进行分组。另一种选择是尝试对未包含在 group_by 子句中的所有列使用GROUP_CONCAT。例如:GROUP_CONCAT(workers_tbl.name SEPARATOR ",") as workers_tbl.name 等。

    【讨论】:

      【解决方案2】:

      distinct() 放在代码顶部,如下所示:

      $this->db->distinct();
      $this->db->select('trxn_tbl.works_id, trxn_tbl.works_date, infrashtructure_txn_info.infrashtructure_name, apps_txn_tbl.apps_name, works_type_txn_tbl.works_type, workers_tbl.vendor_id, workers_tbl.name');
      ...rest of your code...
      

      这有帮助吗?

      【讨论】:

      • $this->db->distinct() 之后添加$this->db->group_by('name_of_column'); 现在?
      • 然后显示......SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列 'dcapp_db.trxn_tbl.works_id',它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
      • 似乎错误与此线程中的错误相同stackoverflow.com/questions/34115174/…
      猜你喜欢
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 2013-06-09
      • 2019-04-18
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多