Codeigniter обновить столбец таблицы с различными значениями

0

У меня есть следующие записи в моей таблице:

id            status         

129           'Ready'           
129           'Ready'          
129           'Confirm'          
129           'Confirm'        
129           'Processing'        
130           'Confirm'        

То, что я пытаюсь изменить, это изменить статус в соответствии с идентификатором на основе ввода пользователем.

Я записываю пользовательский ввод в свой контроллер, как показано ниже:

$id= $this->input->post("id");
$confirm = $this->input->post("confirm");
$processing = $this->input->post("processing");
$ready = $this->input->post("ready");
$delivered = $this->input->post("delivered");

пример входных значений пользователя выглядит следующим образом:

   $id= 129
   $confirm = 1
   $processing = 2
   $ready = 2
   $delivered = 0

Это в основном означает, что все строки с идентификатором 129 должны иметь статус в порядке, подтверждение должно появляться один раз, обрабатывать дважды, готово и не доставляться.

Как я могу обновить статус, чтобы он соответствовал приведенным выше входным данным ниже:

id            status 
129           'Ready'
129           'Ready' 
129           'Confirm'
129           'Processing' 
129           'Processing' 
130           'Confirm' 

В моей модели я пробовал, как показано ниже, но он не работает.

public function update_status($serialized,$confirm,$processing,$ready,$delivered) {
$data = array(
'status' => 'Confirm',  
);
            $this->db->where('is_serialized', $serialized);
            $this->db->limit($confirm);
            $this->db->update('items', $data);'$data = array(
'status' => 'Processing',   
);
            $this->db->where('is_serialized', $serialized);
            $this->db->limit($processing);
            $this->db->update('items', $data);
$data = array(
'status' => 'Ready',    
);
            $this->db->where('is_serialized', $serialized);
            $this->db->limit($ready);
            $this->db->update('items', $data);
$data = array(
'status' => 'Delivered',    
);
            $this->db->where('is_serialized', $serialized);
            $this->db->limit($delivered);
            return $this->db->update('items', $data); }

Любая помощь будет высоко оценен.

'

  • 0
    извините, но это не имеет смысла. предполагая, что таблица имеет только 2 столбца, и этот идентификатор не уникален, вы не можете выбрать конкретный столбец для изменения, поэтому вы пытаетесь установить некоторые странные ограничения для достижения этой цели. Я предполагаю, что вы делаете систему заказа, где товары могут быть отправлены с разной скоростью, вы должны действительно пересмотреть свою схему. это громоздко ребята из dba.stackexchange.com могут помочь
  • 0
    извините, если не очень понятно, в таблице есть другие столбцы, но я не перечислил их, потому что изменение, которое я ищу, включает в себя только два. То, что я пытаюсь получить, - это дать пользователю возможность изменить статус строки или строк с определенным идентификатором. Например, есть две строки идентификатора 129 с состоянием готовности, если пользователь хочет изменить одну или обе эти строки на обработку статуса, как это сделать?
Показать ещё 5 комментариев
Теги:
codeigniter

1 ответ

1
Лучший ответ

Попробуйте это:

function update_status($id, $serialized, $confirm = 0, $processing = 0, $ready = 0, $delivered = 0) {
    if (count($confirm) > 0) {
        $this->db->where('id', $id);
        $this->db->where('is_serialized', $serialized);
        $this->db->limit($confirm);
        $this->db->update('items', array('status' => 'Confirm'));
    }
    if (count($processing) > 0) {
        $this->db->where('status', 'Confirm');
        $this->db->where('id', $id);
        $this->db->where('is_serialized', $serialized);
        $this->db->limit($processing);
        $this->db->update('items', array('status' => 'Processing'));
    }
    if (count($ready) > 0) {
        $this->db->where('status', 'Processing');
        $this->db->where('id', $id);
        $this->db->where('is_serialized', $serialized);
        $this->db->limit($ready);
        $this->db->update('items', array('status' => 'Ready'));
    }
    if (count($delivered) > 0) {
        $this->db->where('status', 'Ready');
        $this->db->where('id', $id);
        $this->db->where('is_serialized', $serialized);
        $this->db->limit($delivered);
        $this->db->update('items', array('status' => 'Delivered'));
    }
}
  • 0
    большое спасибо за ваш ответ и помощь
  • 0
    если этот ответ сработал, пожалуйста, отметьте как принятый

Ещё вопросы

Сообщество Overcoder
Наверх
Меню