Как игнорировать столбец при обновлении в MySQL?

0

У меня есть таблица книг и столбец статуса (тип бит), у меня есть три ситуации при редактировании моей информационной формы.

  1. если доступный статус книги = true,
  2. если книга не доступна status field = false,
  3. если только редактирует информацию о книгах, кроме поля состояния, он должен игнорировать столбец состояния таблицы MySQL, поскольку он

Итак, для третьей ситуации я должен игнорировать столбец статуса, если нет значения, установленного, есть ли способ, который я могу сделать? пожалуйста, помогите мне

Это мой запрос на обновление

$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']);
  • 3
    Что вы подразумеваете под "он должен игнорировать столбец статуса" ? Если вы не хотите его обновлять, не указывайте в своем запросе status = :status
  • 0
    да, но если есть значение, установленное им, используя тот же запрос, обновите его, это проблема
Показать ещё 1 комментарий
Теги:

2 ответа

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

Вы можете использовать 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() чтобы определить, как вы хотите, чтобы эта логика произошла.

  • 0
    для раскрывающегося меню состояния у меня есть только 2 варианта, которые имеют значение true или false, однако любой из этих параметров будет устанавливать значение, так как я могу проверить, есть ли условие? Если метод isset не будет работать в моем случае. так что мне нужно добавить другое значение в раскрывающемся меню, чтобы проверить?
  • 1
    Можно предположить, что это значение в раскрывающемся списке - это то, что пользователь хочет, и всегда обновлять его (то есть вопрос на самом деле не нужен). У вас может быть выпадающее значение «Игнорировать», и это просто оставит значение таким, какое оно было. У вас может быть опция на вашем экране, которая говорит, какие биты данных вы хотите обновить.
Показать ещё 2 комментария
1

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

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'] если он не пуст, а затем объедините его в ваш запрос.

  • 0
    это помогло, мой друг?
  • 0
    только в раскрывающемся меню я получаю значение состояния true или false, в этом случае как я назначаю, это не установлено?
Показать ещё 4 комментария

Ещё вопросы

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