Принять «Null» значение, используя COALESCE в операторе обновления в MySQL и переполнении стека

У меня есть несколько <forms> которые имеют 1 элемент формы (скажем, текстовое поле) каждый. Но значения всех этих элементов находятся в одной таблице MySQL. Эти элементы могут быть изменены (т.е. вставлены / обновлены / удалены) по отдельности, отправив соответствующие формы индивидуально. Увидеть этот скрипку, чтобы получить базовое представление о структуре HTML.

HTML

<form class="form-horizontal" id="form1" method="post">
<div class="form-group">
<label class="col-xs-3 control-label">Form 1</label>
<div class="col-xs-10">
<input class="form-control" type="text" name="element1" maxlength="50" />
<br>
<button type="button" class="btn btn-default btn-xs">Cancel</button>
<button type="submit" class="btn btn-primary btn-xs">Save Changes</button>
</div>
</div>
</form><form class="form-horizontal" id="form2" method="post">
<div class="form-group">
<label class="col-xs-3 control-label">Form 2</label>
<div class="col-xs-9">
<input class="form-control" type="text" name="element2" maxlength="50" />
<br>
<button type="button" class="btn btn-default btn-xs">Cancel</button>
<button type="submit" class="btn btn-primary btn-xs">Save Changes</button>
</div>
</div>
</form>

PHP

if(isset($_POST['element1'])){
if(empty($_POST['element1'])){
$element1= ''; //Update empty value if $_POST is empty
}
else{
$element1= $_POST['element1'];
}
}
else{
$element1= null;
}

if(isset($_POST['element2'])){
if(empty($_POST['element2'])){
$element2= ''; //Update empty value if $_POST is empty
}
else{
$element2= $_POST['element2'];
}
}
else{
$element2= null;
}

$sql_update = "UPDATE element_table SET element1=COALESCE(NULLIF('" . mysql_real_escape_string($element1) . "',''), element1), element2=COALESCE(NULLIF('" . mysql_real_escape_string($element2) . "',''),element2) WHERE id=01";

MySQL Table

________________________________________________________________________________
|   id   |   element1   |   element2   |   element3   |   element4   |   ...   |
________________________________________________________________________________
|   01   |       1      |       2      |       3      |       4      |   ...   |

Требования

  1. Когда я отправляю форму 1, $ _POST [‘element2’] не устанавливается, поэтому я не хочу изменять element2. Запрос на обновление изменяет только element1.
  2. Когда я отправляю # form1,

    а. Если $ _POST [‘element1’] не пусто, обновите значение в переменной POST.

    б. Если $ _POST [‘element1’] пустой, затем обновите ноль значение в дБ. оставить столбец пустым.

вопрос

Пункт № 1 и 2.а. работают нормально, однако я не могу выполнить пункт № 2.b. Может быть, я использую COALESCE неправильно. Может кто-нибудь, пожалуйста, покажите мне, как обновить пустое значение в db, все еще используя COALESCE? Спасибо

Постскриптум Дизайн БД не может быть изменен по некоторым причинам, которые я не могу раскрыть здесь.

0

Решение

В подзапрос добавьте UNION SELECT 'default' LIMIT 1:

UPDATE `table` SET `f1`=(
SELECT `f2` FROM `table2` WHERE `f3` = 'value'
UNION SELECT 0
LIMIT 1
);

Вот как я только что решил похожую проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]