MySQL CASE WHEN END в Codeigniter - PullRequest
       1

MySQL CASE WHEN END в Codeigniter

0 голосов
/ 12 ноября 2018

В настоящее время я работаю над проектом Codeigniter, связанным с управлением магазинами.В модели я использовал следующую функцию, чтобы получить сводку покупок и проблем для вида через контроллер.

Функция

function issueDetailReport($id,$start,$end){
        $this->db->select('*, store_update_stock_details.item,
        CASE 
        WHEN store_update_stock.order_status = "purchase" THEN tbl_supplier.supplier_name
        WHEN store_update_stock.order_status = "issue" THEN store_officer.officer_name 
        END AS supplier');
        $this->db->from('store_update_stock');
        $this->db->join('store_update_stock_details','store_update_stock.update_stock_id=store_update_stock_details.update_stock_id');
        $this->db->join('store_officer','store_update_stock.supplier=store_officer.officer_id');
        $this->db->join('tbl_supplier','store_update_stock.supplier=tbl_supplier.supplier_id');
        $this->db->join('store_item','store_update_stock_details.item=store_item.item_id');
        $this->db->where("store_update_stock.status='1' and store_item.item_id=$id");
        //$this->db->where('store_update_stock.update_stock_id in (select update_stock_id from store_update_stock) ');
        if($start!=NULL && $end!=NULL)
        $this->db->where("store_update_stock.billed_date BETWEEN '$start' AND '$end'");
        $this->db->order_by('store_update_stock.purchased_date','DESC');
        $q=$this->db->get();
        if($q->num_rows()>0){
            return $q->result();
        }
        return false;
    }

02) Все работает нормально.Но конструктор case запускает следующую ошибку

Ошибка базы данных: произошла ошибка: 1064

В синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '. order_status = "issue" THEN store_officer. officer_name END AS supplier FR' в строке 1

03) Я попытался решить проблему.Но не получил желаемый результат.Я не могу найти ошибку и что может быть не так.Кто-нибудь может мне помочь?

Таблица поставщиков

+-------------+---------------+
| supplier_id | supplier_name |
+-------------+---------------+
|         500 | ABC           |
|         501 | DEF           |
|         502 | GHI           |
|         503 | JKL           |
+-------------+---------------+

Таблица офицеров

+------------+--------------+
| officer_id | officer_name |
+------------+--------------+
|       1000 | Danial       |
|       1001 | Jhon         |
|       1002 | William      |
|       1003 | Patrick      |
|       1004 | Salman       |
+------------+--------------+

Выход

+------+--------------------------+------------+------------+--------------+
| item | supplier / officer_name  |   start    |    end     | order_status |
+------+--------------------------+------------+------------+--------------+
| A4   | ABC                      | 2018-11-01 | 2018-11-01 | purchase     |
| A5   | DEF                      | 2018-11-01 | 2018-11-01 | purchase     |
| A3   | Danial                   | 2018-11-02 | 2018-11-02 | issue        |
| B5   | Jhon                     | 2018-11-05 | 2018-11-05 | issue        |
+------+--------------------------+------------+------------+--------------+

1 Ответ

0 голосов
/ 13 ноября 2018

Попробуйте изменить:

$this->db->select('*, store_update_stock_details.item,
    CASE 
    WHEN store_update_stock.order_status = "purchase" THEN tbl_supplier.supplier_name
    WHEN store_update_stock.order_status = "issue" THEN store_officer.officer_name 
    END AS supplier');

Кому:

$this->db->select('store_update_stock_details.item,
    CASE 
    WHEN store_update_stock.order_status = "purchase" THEN tbl_supplier.supplier_name
    WHEN store_update_stock.order_status = "issue" THEN store_officer.officer_name 
    END AS supplier, *');

MySQL не любит вещи в операторах выбора после * и много раз отказывается работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...