У меня есть таблица книги и столбец статуса (битовый тип), у меня есть 3 ситуации при редактировании формы информации о книге.
Итак, для третьей ситуации я должен игнорировать столбец состояния, если значение не установлено. Могу ли я как-то это сделать? пожалуйста, помогите мне
Это мой запрос на обновление
$this->db->query('UPDATE books SET book_title = :title, file_type = :file_type, status = :status WHERE id = :id');
$this->db->bind(':title', $data['title']);
$this->db->bind(':file_type', $data['file_type']);
$this->db->bind(':status', $data['availability']);
$this->db->bind(':id', $data['id']);
да, но если есть значение, установленное im, используя тот же запрос, обновите его, это проблема
Тогда вы не можете использовать тот же запрос, так просто ...






Попробуй это:
if (isset($data['status'])) {
$status = ', status = :status';
}
$this->db->query("UPDATE books SET book_title = :title, file_type = :file_type $status WHERE id = :id");
$this->db->bind(':title', $data['title']);
$this->db->bind(':file_type', $data['file_type']);
if (isset($data['status'])) {
$this->db->bind(':status', $data['availability']);
}
$this->db->bind(':id', $data['id']);
Просто проверьте наличие $data['status'], если он не пустой, а затем объедините его в свой запрос.
это помогло, мой друг?
только в раскрывающемся меню я получаю значение статуса true или false, в этом случае, как я его назначаю, не установлено?
Выпадающее поле @Looper?
извините раскрывающееся меню, я могу только выбрать доступный или недоступный, поэтому, однако, он устанавливает значение
Если ваше раскрывающееся меню допускает только значения available и not available, как вы можете определить, настраивал ли пользователь статус или просто редактировал сведения о книге?
да, это правильно, так что я добавлю еще один вариант для этого, спасибо, дружище
Вы можете использовать mysql ifnull() и передать значение null для статуса, если вы не хотите его обновлять. Идея в том, что если вы передадите null, вы просто оставите значение как есть ...
$this->db->query('UPDATE books
SET book_title = :title, file_type = :file_type,
status = ifnull(:status,status)
WHERE id = :id');
$this->db->bind(':title', $data['title']);
$this->db->bind(':file_type', $data['file_type']);
if () { // You want to set the value
$this->db->bind(':status', $data['availability']);
}
else { // leave value as is
$this->db->bind(':status', null);
}
$this->db->bind(':id', $data['id']);
Вам нужно будет заполнить бит if (), чтобы определить, как вы хотите, чтобы эта логика происходила.
для раскрывающегося меню статуса у меня есть только 2 варианта: true или false, однако любой из них будет устанавливать значение, так как я могу проверить, если условие? если метод isset не работает в моем случае. так что мне нужно добавить другое значение в раскрывающемся меню для проверки?
Вы можете предположить, что это значение в раскрывающемся списке - это то, что хочет пользователь, и всегда обновляйте его (что означает, что вопрос на самом деле не нужен). У вас может быть раскрывающееся значение «Игнорировать», и это просто оставит значение без изменений. У вас может быть опция на вашем экране, которая говорит, какие биты данных вы хотите обновить.
Спасибо, приятель, я попробую это
Что вы имеете в виду под "он должен игнорировать столбец статуса"? Если вы не хотите его обновлять, не указывайте
status = :statusв своем запросе.