SQL查询在phpMyAdmin上工作,但在Codeigniter中不工作

SQL查询在phpMyAdmin上工作,但在Codeigniter中不工作,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我有这个疑问 选择 阿尔金, 如果tof_art_lookup.arl_kind=2,则tof_suppliers.sup_brand、tof_brands.bra_brand作为品牌, 自动显示 从…起 豆腐艺术 左连接 豆腐品牌 在…上 bra_id=arl_bra_id 内连接 豆腐制品 在…上 tof_articles.art_id=tof_art_lookup.arl_art_id 内连接 豆腐供应商 在…上 豆腐供应商.sup\u id=豆腐制品.art\u sup\u id 哪里

我有这个疑问

选择 阿尔金, 如果tof_art_lookup.arl_kind=2,则tof_suppliers.sup_brand、tof_brands.bra_brand作为品牌, 自动显示 从…起 豆腐艺术 左连接 豆腐品牌 在…上 bra_id=arl_bra_id 内连接 豆腐制品 在…上 tof_articles.art_id=tof_art_lookup.arl_art_id 内连接 豆腐供应商 在…上 豆腐供应商.sup\u id=豆腐制品.art\u sup\u id 哪里 arl_art_id=@art_id 和阿尔·金德在3 订购人 阿尔金, bra_品牌, 自动显示限制100; 当我在phpmyadmin或任何具有sql comand功能的软件上执行此操作时,一切正常,输出正常

当我尝试在codeigniter中插入它时,问题出现了,我的主要问题是if语句,我尝试像这样插入它

return $query = $this->db
        ->select('arl_kind, IF(tof_art_lookup.arl_kind = 2, tof_suppliers.sup_brand, tof_brands.bra_brand) AS brand,ARL_DISPLAY_NR', FALSE)
        ->from('tof_art_lookup')
        ->join('tof_brands', 'bra_id = arl_bra_id', 'LEFT')
        ->join('tof_articles', 'tof_articles.art_id  = tof_art_lookup.arl_art_id', 'INNER')
        ->join('tof_suppliers','tof_suppliers.sup_id = tof_articles.art_sup_id', 'INNER')
        ->where('arl_art_id', $id)
        ->where_in('arl_kind', array('3'))
        ->order_by('arl_kind','bra_brand','arl_display_nr')
        ->limit(100)
        ->get();
 $query_string = "SELECT
        arl_kind,
        IF (tof_art_lookup.arl_kind = 2, tof_suppliers.sup_brand, tof_brands.bra_brand) AS brand,
        arl_display_nr
    FROM
        tof_art_lookup
    LEFT JOIN
        tof_brands
    ON
        bra_id = arl_bra_id
    INNER JOIN
        tof_articles
    ON
        tof_articles.art_id = tof_art_lookup.arl_art_id
    INNER JOIN
        tof_suppliers
    ON
        tof_suppliers.sup_id = tof_articles.art_sup_id
    WHERE
        arl_art_id = @art_id
    AND arl_kind IN (3)
    ORDER BY
        arl_kind,
        bra_brand,
        arl_display_nr limit 100";



$query=$this->db->query($query_string);
if ($query->num_rows () > 0) {
    return $query->result_array ();
} else {
    return FALSE;
}
return$query=$this->db ->选择' 阿尔金, 如果tof_art_lookup.arl_kind=2,则tof_suppliers.sup_brand、tof_brands.bra_brand作为品牌, 自动显示 从…起 豆腐艺术 左连接 豆腐品牌 在…上 bra_id=arl_bra_id 内连接 豆腐制品 在…上 tof_articles.art_id=tof_art_lookup.arl_art_id 内连接 豆腐供应商 在…上 豆腐供应商.sup\u id=豆腐制品.art\u sup\u id 哪里 arl_art_id=@art_id 和阿尔·金德在3 订购人 阿尔金, bra_品牌, 自动显示限制100' ->得到; 第二种选择是这样的

return$query=$this->db ->选择“ARL\U种类,如果豆腐艺术\U查找。ARL\U种类=2,豆腐供应商。sup\U品牌,豆腐品牌。bra\U品牌作为品牌,ARL\U显示\n” ->来自“豆腐艺术查找” ->加入“豆腐品牌”,“bra\U id=arl\U bra\U id”,“左” ->加入'tof_articles','tof_articles.art_id=tof_art_lookup.arl_art_id','INNER' ->加入'tof_suppliers'、'tof_suppliers.sup_id=tof_articles.art_sup_id'、'INNER' ->其中'ARL_ART_ID',$ID ->在“ARL_KIND”中,数组“3” //->其中'A.ARL_DISPLAY','0' ->按“arl_kind”、“bra_brand”、“arl_display_nr”分组 ->得到; 这两个选项都可以工作,但部分没有第二个选择选项,即带有if的选项


谁能帮我解决这个问题。

我相信你的代码应该是这样的

return $query = $this->db
        ->select('arl_kind, IF(tof_art_lookup.arl_kind = 2, tof_suppliers.sup_brand, tof_brands.bra_brand) AS brand,ARL_DISPLAY_NR', FALSE)
        ->from('tof_art_lookup')
        ->join('tof_brands', 'bra_id = arl_bra_id', 'LEFT')
        ->join('tof_articles', 'tof_articles.art_id  = tof_art_lookup.arl_art_id', 'INNER')
        ->join('tof_suppliers','tof_suppliers.sup_id = tof_articles.art_sup_id', 'INNER')
        ->where('arl_art_id', $id)
        ->where_in('arl_kind', array('3'))
        ->order_by('arl_kind','bra_brand','arl_display_nr')
        ->limit(100)
        ->get();
 $query_string = "SELECT
        arl_kind,
        IF (tof_art_lookup.arl_kind = 2, tof_suppliers.sup_brand, tof_brands.bra_brand) AS brand,
        arl_display_nr
    FROM
        tof_art_lookup
    LEFT JOIN
        tof_brands
    ON
        bra_id = arl_bra_id
    INNER JOIN
        tof_articles
    ON
        tof_articles.art_id = tof_art_lookup.arl_art_id
    INNER JOIN
        tof_suppliers
    ON
        tof_suppliers.sup_id = tof_articles.art_sup_id
    WHERE
        arl_art_id = @art_id
    AND arl_kind IN (3)
    ORDER BY
        arl_kind,
        bra_brand,
        arl_display_nr limit 100";



$query=$this->db->query($query_string);
if ($query->num_rows () > 0) {
    return $query->result_array ();
} else {
    return FALSE;
}
注意:select方法的第二个参数设置为FALSE,使用order_by而不是group_by作为原始查询中的参数。

这样使用

return $query = $this->db
        ->select('arl_kind, IF(tof_art_lookup.arl_kind = 2, tof_suppliers.sup_brand, tof_brands.bra_brand) AS brand,ARL_DISPLAY_NR', FALSE)
        ->from('tof_art_lookup')
        ->join('tof_brands', 'bra_id = arl_bra_id', 'LEFT')
        ->join('tof_articles', 'tof_articles.art_id  = tof_art_lookup.arl_art_id', 'INNER')
        ->join('tof_suppliers','tof_suppliers.sup_id = tof_articles.art_sup_id', 'INNER')
        ->where('arl_art_id', $id)
        ->where_in('arl_kind', array('3'))
        ->order_by('arl_kind','bra_brand','arl_display_nr')
        ->limit(100)
        ->get();
 $query_string = "SELECT
        arl_kind,
        IF (tof_art_lookup.arl_kind = 2, tof_suppliers.sup_brand, tof_brands.bra_brand) AS brand,
        arl_display_nr
    FROM
        tof_art_lookup
    LEFT JOIN
        tof_brands
    ON
        bra_id = arl_bra_id
    INNER JOIN
        tof_articles
    ON
        tof_articles.art_id = tof_art_lookup.arl_art_id
    INNER JOIN
        tof_suppliers
    ON
        tof_suppliers.sup_id = tof_articles.art_sup_id
    WHERE
        arl_art_id = @art_id
    AND arl_kind IN (3)
    ORDER BY
        arl_kind,
        bra_brand,
        arl_display_nr limit 100";



$query=$this->db->query($query_string);
if ($query->num_rows () > 0) {
    return $query->result_array ();
} else {
    return FALSE;
}

在这种情况下最好使用query方法,看看这里:是的,它可以工作,我认为我应该只在if函数中使用该语句。非常感谢。问题是它只显示了一个结果,我应该得到该id的所有答案。太好了!看起来您没有将group_by更改为order_by,是吗?我更改了它,但我看到刷新后它会正常工作。伟大的非常感谢。