0

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

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

谢谢你的帮忙。

编辑:现在正在工作(基于理查德维维安的回答)

    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);
    }
4

3 回答 3

2

我不确定您使用的是哪个数据库模型,但NULL如果您没有要传递的值,逻辑将是传递一个值,并在更新之前检查这些值是否不为空。

SQL 服务器

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,如果是,则返回第二个值。第二个值与当前值相同,因此它用相同的值更新它(即不改变值)。

于 2012-11-22T11:29:42.343 回答
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"
}
于 2012-11-22T11:31:30.897 回答
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将返回列值,在这种情况下,该列将使用它的值更新,即它不会改变。

于 2012-11-22T11:28:54.400 回答