如果收到x则更新列,否则更新y

时间:2012-11-22 11:23:58

标签: php mysql sql sql-update

如果我有一个包含3列的表:id,column1,column2。如果我想在URL请求中接收“column1”参数时更新column1,否则在URL地址中接收“column2”参数时更新column2。那可能吗?我做到了,但我认为这不正确:

$sql= "UPDATE people SET 
answer_yes= '$answer_yes'+1,
answer_no='$answer_no'+1";

感谢您的帮助。

编辑:现在正在运作(基于Richard Vivian回答)

    If($answer_yes==1)
{

    $sql= "UPDATE people SET answer_yes= answer_yes +1"or die(mysql_error());
    mysql_query($sql);
    }
    else if ($answer_no==0)
    {
    $sql= "UPDATE people SET answer_no= answer_no+1" or die(mysql_error());
    mysql_query($sql);
    }

3 个答案:

答案 0 :(得分:2)

我不确定您使用的是哪种数据库模型,但如果您没有要传递的值,则逻辑将传递NULL值,并在更新之前检查值是否为null。 / p>

SQL Server

UPDATE Table
SET Column1=ISNULL(@Column1,Column1),
    Column2=ISNULL(@Column2,Column2)

<强>的MySQL

UPDATE Table
SET Column1=IFNULL($Column1,Column1),
    Column2=IFNULL($Column2,Column2)

这里发生的是ISNULL/IFNULL正在检查传递给它的第一个值是NULL,如果是,则返回第二个值。第二个值是与当前值相同的值,因此它使用相同的值更新它(即不更改值)。

答案 1 :(得分:2)

您可以创建2个SQL语句选项:

If($answer_yes)
{
$sql= "UPDATE people SET answer_yes= '$answer_yes'+1"
}
else
{
$sql= "UPDATE people SET answer_no= '$answer_no'+1"
}

答案 2 :(得分:1)

你可以这样做:

UPDATE people 
SET answer_yes = COALESCE($answer_yes + 1, answer_yes),
    answer_no  = COALESCE($answer_no + 1, answer_no);

COALESCE返回传递给它的值中的第一个非NULL值。如果$answer_yes$answer_no的任何参数都以NULL值传递,则$answer_yes + 1$answer_no + 1也将评估为NULL,因为COALESCE将返回列值,在这种情况下,列将使用其值进行更新,即不会更改。