簡體   English   中英

SQL查詢適用於phpMyAdmin,但不適用於Codeigniter

[英]SQL query works on phpMyAdmin but not in Codeigniter

我有這個查詢

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;

當我在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
    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')
        ->get();

第二種選擇

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')
    ->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'))
    //->where('A.ARL_DISPLAY','0')
    ->group_by('arl_kind','bra_brand','arl_display_nr')
    ->get();

它們都可以工作,但是在沒有第二個選擇選項的情況下會偏偏(如果有)。

誰能幫我解決這個問題。

我相信您的代碼應如下所示

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();

注意: select()方法的第二個參數設置為FALSE並使用order_by()代替原始查詢中的group_by()

這樣使用

 $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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM