Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
Mysql 在一个查询中选择一个值并更新状态_Mysql - Fatal编程技术网

Mysql 在一个查询中选择一个值并更新状态

Mysql 在一个查询中选择一个值并更新状态,mysql,Mysql,我想选择第一个可用值“name”,并将其设置为take。可以在一个查询中完成吗 这是我在两个查询中要做的: my_table id, name, active $sql="SELECT id, name FROM my_table WHERE active='N' LIMIT 1"; $result = mysqli_query($con, $sql); $row = mysqli_fetch_array($result); $id=$row["id"]; $name=$row["name"

我想选择第一个可用值“name”,并将其设置为take。可以在一个查询中完成吗

这是我在两个查询中要做的:

my_table
id, name, active

$sql="SELECT id, name FROM my_table WHERE active='N' LIMIT 1";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result);

$id=$row["id"];
$name=$row["name"];

$sql="UPDATE my_table SET active='Y' WHERE id=$id";
$result=mysqli_query($con, $sql);

不,不能在update语句中返回值,因此如果要执行两个操作选择和更新,则需要两个查询。

不需要选择

UPDATE my_table 
   SET active = 'Y' 
 WHERE active = 'N'
 ORDER 
    BY id 
 LIMIT 1;
若不希望返回名称,那个么只能执行UPDATE语句。它将返回更新的行数

假设id是主键,根据返回的计数,您可以检查行是否存在,例如,如果计数为0,则行不存在,如果计数为1,则行存在。这与从my_表中选择*一样好,其中id=$id

试试这个

  update my_table set active = 'Y' 
  where id in 
 (select id from (SELECT id, name FROM my_table WHERE active='N' LIMIT 1)h);

您的第一个SELECT查询对我来说似乎有些不确定。你不应该在那里使用排序吗?选择的意义何在?我想获得名称值,当然还有更新的ID。如果没有排序,你想知道选择限制1的排序有点毫无意义,然后查看下面的@草莓答案。通过限制1,我理解得到满足条件的一行。我不知道为什么这是错误的?我应该使用“按活动限制1排序”吗?我仍然需要使用“选择查询…”。。。如何获取名称值?我不明白您的意思,正如我所说,我还需要知道名称值,但UPDATE is只返回实际更改的行数。看起来r0b0urd0n是对的,我需要两个查询。我不擅长mysql,所以我认为它可以在一个查询中完成。我一开始就说了,我想选择第一个可用值“name”。。。。很抱歉,这还不够清楚,而且从我的两个问题中,你可以看到我想做什么:-我建议你看看。r0b0urd0n可能是正确的,但无论如何,您当前的代码都有缺陷。