Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果收到x,则更新列,否则更新y_Php_Mysql_Sql_Sql Update - Fatal编程技术网

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

Php 如果收到x,则更新列,否则更新y,php,mysql,sql,sql-update,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的回答) 您可以这样做

如果我有一个包含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的回答)

您可以这样做:

UPDATE people 
SET answer_yes = COALESCE($answer_yes + 1, answer_yes),
    answer_no  = COALESCE($answer_no + 1, answer_no);
返回传递给它的值中的第一个非
NULL
able值。如果任何参数
$answer\u yes
$answer\u no
被传递一个
NULL
值,那么
$answer\u yes+1
$answer\u no+1
将被计算为
NULL
,对于
合并
将返回列值,在这种情况下,列将用其值更新,即它不会更改。

您可以执行以下操作:

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

返回传递给它的值中的第一个非
NULL
able值。如果任何参数
$answer\u yes
$answer\u no
被传递一个
NULL
值,那么
$answer\u yes+1
$answer\u no+1
将被计算为
NULL
,对于
合并
将返回列值,在这种情况下,列将使用其值进行更新,也就是说,它不会更改。

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

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

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

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

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

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

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

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

@简:平面模型。我只有一张没有关系的桌子。对不起,我是说哪个RDBMS?MySQL?SQL Server?@Curl:MySQL使用wamp服务器。@Curt:Flat模型。我只有一张没有关系的桌子。对不起,我是说哪个RDBMS?MySQL?SQL Server?@Curl:MySQL使用wamp服务器。
COALESCE
$answer\u yes
是URL地址中的参数,
answer\u yes
是数据库中的列名?
COALESCE
$answer\u yes
是URL地址中的参数,
answer\u yes
是数据库中的列名?这似乎很简单;我现在就试试;)。请看我编辑的帖子。我尝试了另一个想法。例如,当我在URL中收到答案为“是”的“1”时,数据库中“答案为”的值将增加(这就是我想要做的)。我说的对吗?没有错误,但没有提及。这一点看起来很简单;我现在就试试;)。请看我编辑的帖子。我尝试了另一个想法。例如,当我在URL中收到答案为“是”的“1”时,数据库中“答案为”的值将增加(这就是我想要做的)。这是正确的我所做的,没有错误,但没有增加。请看我编辑后的文章。我尝试了另一个想法。例如,当我在URL中收到答案为“是”的“1”时,数据库中“答案为”的值将增加(这就是我想要做的)。这是正确的我所做的,没有错误,但没有增加。请看我编辑后的文章。我尝试了另一个想法。例如,当我在URL中收到答案为“是”的“1”时,数据库中“答案为”的值将增加(这就是我想要做的)。我说的对吗,没有错误,但没有提及。