Php 具有join 4表的Codeigniter活动记录

Php 具有join 4表的Codeigniter活动记录,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,伙计们,我有4个表uhd\u凭证菜单,uhd\u菜单,uhd\u凭证变体菜单,uhd\u变体菜单 哪个uhd\u凭证菜单和uhd\u菜单通过菜单id连接,哪个uhd\u凭证变型菜单和uhd\u凭证菜单通过凭证菜单id连接,最后一个,uhd\u variant\u菜单和凭证\u variant\u菜单通过variant\u菜单id 这是我如何获取数据的代码: $this->db->select("uhd_voucher_menu.voucher_id,uhd_menu.

伙计们,我有4个表
uhd\u凭证菜单
uhd\u菜单
uhd\u凭证变体菜单
uhd\u变体菜单

哪个
uhd\u凭证菜单
uhd\u菜单
通过
菜单id
连接,哪个
uhd\u凭证变型菜单
uhd\u凭证菜单
通过
凭证菜单id
连接,最后一个,
uhd\u variant\u菜单
凭证\u variant\u菜单
通过
variant\u菜单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"
}
[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"
}
正如您所看到的,带有相同的
凭证菜单\u id
黄金鲑鱼将返回两次

如果
凭证\u菜单\u 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"
}
[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"
}
[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"
}
与另一条
金鲑鱼相同
,具有相同的
凭证菜单\u id
4

我希望
变量\u名称
成为数组,以便具有相同
凭证\u菜单\u id
的if数据不会调用两次

伙计们,你们能帮我怎么执行我想要的数据吗?
谢谢(:

您必须使用分组方式,我稍微修改了您的查询:

 $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()发布生成的查询;