【问题标题】:Codeigniter active records with join 4 table带有联接 4 表的 Codeigniter 活动记录
【发布时间】:2016-08-23 02:45:59
【问题描述】:

伙计们,我有 4 张桌子 uhd_voucher_menuuhd_menuuhd_voucher_variant_menuuhd_variant_menu

其中uhd_voucher_menuuhd_menu通过menu_id连接,比uhd_voucher_variant_menuuhd_voucher_menu通过voucher_menu_id连接,最后一个uhd_variant_menuvoucher_variant_menu通过variant_menu_id连接

这是我获取数据的代码:

        $this->db->select("uhd_voucher_menu.voucher_id,uhd_menu.menu_name,uhd_voucher_menu.qty,uhd_variant_menu.variant_name,uhd_voucher_menu.voucher_menu_id");
        $this->db->from("uhd_voucher_menu");
        $this->db->join("uhd_menu","uhd_menu.menu_id = uhd_voucher_menu.menu_id");
        $this->db->join("uhd_voucher_variant_menu","uhd_voucher_variant_menu.voucher_menu_id = uhd_voucher_menu.voucher_menu_id","left");
        $this->db->join("uhd_variant_menu","uhd_variant_menu.variant_menu_id = uhd_voucher_variant_menu.variant_menu_id","left");
        $this->db->where("voucher_id",$data["voucher"]["voucher_id"]);
        $this->db->where("uhd_menu.restaurant_id",$restaurant_id);
        $res = $this->db->get()->result_array();

从该活动记录中将返回此数据:

[0]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(13) "Golden Salmon"
  ["qty"]=>
  string(1) "2"
  ["variant_name"]=>
  string(5) "Spicy"
  ["voucher_menu_id"]=>
  string(1) "3"
}
[1]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(13) "Golden Salmon"
  ["qty"]=>
  string(1) "2"
  ["variant_name"]=>
  string(6) "Medium"
  ["voucher_menu_id"]=>
  string(1) "3"
}
[2]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(13) "Golden Salmon"
  ["qty"]=>
  string(1) "1"
  ["variant_name"]=>
  string(4) "Sour"
  ["voucher_menu_id"]=>
  string(1) "4"
}
[3]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(13) "Golden Salmon"
  ["qty"]=>
  string(1) "1"
  ["variant_name"]=>
  string(6) "Medium"
  ["voucher_menu_id"]=>
  string(1) "4"
}
[4]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(14) "Red Crown Crab"
  ["qty"]=>
  string(1) "2"
  ["variant_name"]=>
  NULL
  ["voucher_menu_id"]=>
  string(1) "1"
}
[5]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(8) "Omellete"
  ["qty"]=>
  string(1) "3"
  ["variant_name"]=>
  NULL
  ["voucher_menu_id"]=>
  string(1) "2"
}

如您所见,golden_salmonvoucher_menu_id 相同,返回两次

我想要voucher_menu_id 是否相同,所以从这个数据:

[0]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(13) "Golden Salmon"
  ["qty"]=>
  string(1) "2"
  ["variant_name"]=>
  string(5) "Spicy"
  ["voucher_menu_id"]=>
  string(1) "3"
}
[1]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(13) "Golden Salmon"
  ["qty"]=>
  string(1) "2"
  ["variant_name"]=>
  string(6) "Medium"
  ["voucher_menu_id"]=>
  string(1) "3"
}

我希望数据返回变成这样:

[0]=>
array(5) {
  ["voucher_id"]=>
  string(1) "1"
  ["menu_name"]=>
  string(13) "Golden Salmon"
  ["qty"]=>
  string(1) "2"
  ["variant_name"]=>
  array(2){
    [1]=>
    string(5) "Spicy"
    [2]=>
    string(6) "Medium"
  }
  ["voucher_menu_id"]=>
  string(1) "3"
}

与另一个 golden_salmon 相同,voucher_menu_id 4

我希望variant_name 变成数组,这样voucher_menu_id 相同的 if 数据就不会调用两次

你们能帮我如何按照我的意愿执行数据​​吗? 谢谢(:

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:

    你必须使用group by,我稍微修改了你的查询:

     $this->db->select("uhd_voucher_menu.voucher_id,uhd_menu.menu_name,uhd_voucher_menu.qty,GROUP_CONCAT(uhd_variant_menu.variant_name SEPARATOR ',') AS variants,uhd_voucher_menu.voucher_menu_id");
        $this->db->from("uhd_voucher_menu");
        $this->db->join("uhd_menu","uhd_menu.menu_id = uhd_voucher_menu.menu_id");
        $this->db->join("uhd_voucher_variant_menu","uhd_voucher_variant_menu.voucher_menu_id = uhd_voucher_menu.voucher_menu_id","left");
        $this->db->join("uhd_variant_menu","uhd_variant_menu.variant_menu_id = uhd_voucher_variant_menu.variant_menu_id","left");
        $this->db->where("voucher_id",$data["voucher"]["voucher_id"]);
        $this->db->where("uhd_menu.restaurant_id",$restaurant_id);
    $this->db->group_by("uhd_voucher_menu.voucher_id");
        $res = $this->db->get()->result_array();
    

    查询输出后,我们可以将逗号分隔的值转换为数组。

    尝试发布结果...

    【讨论】:

    • 它只返回1个数据
    • 使用 echo $this->db->last_query(); 发布生成的查询;
    猜你喜欢
    • 2013-07-30
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多