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

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

  1. если поле статуса наличия книги = true,
  2. если книга недоступна поле статуса = 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']);

Что вы имеете в виду под "он должен игнорировать столбец статуса"? Если вы не хотите его обновлять, не указывайте status = :status в своем запросе.

Phil 22.05.2018 08:38

да, но если есть значение, установленное im, используя тот же запрос, обновите его, это проблема

Looper 22.05.2018 08:39

Тогда вы не можете использовать тот же запрос, так просто ...

arkascha 22.05.2018 08:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
193
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

это помогло, мой друг?

Salim Ibrogimov 22.05.2018 08:52

только в раскрывающемся меню я получаю значение статуса true или false, в этом случае, как я его назначаю, не установлено?

Looper 22.05.2018 08:53

Выпадающее поле @Looper?

Salim Ibrogimov 22.05.2018 08:54

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

Looper 22.05.2018 08:56

Если ваше раскрывающееся меню допускает только значения available и not available, как вы можете определить, настраивал ли пользователь статус или просто редактировал сведения о книге?

Nick 22.05.2018 09:07

да, это правильно, так что я добавлю еще один вариант для этого, спасибо, дружище

Looper 22.05.2018 09:09
Ответ принят как подходящий

Вы можете использовать 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 не работает в моем случае. так что мне нужно добавить другое значение в раскрывающемся меню для проверки?

Looper 22.05.2018 09:06

Вы можете предположить, что это значение в раскрывающемся списке - это то, что хочет пользователь, и всегда обновляйте его (что означает, что вопрос на самом деле не нужен). У вас может быть раскрывающееся значение «Игнорировать», и это просто оставит значение без изменений. У вас может быть опция на вашем экране, которая говорит, какие биты данных вы хотите обновить.

Nigel Ren 22.05.2018 09:09

Спасибо, приятель, я попробую это

Looper 22.05.2018 09:11

Другие вопросы по теме