首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何选择一个记录,更新它,并确保它的平均值没有被更新?

如何选择一个记录,更新它,并确保它的平均值没有被更新?
EN

Stack Overflow用户
提问于 2013-08-25 20:36:27
回答 3查看 116关注 0票数 0

我需要这样做:

代码语言:javascript
运行
复制
SELECT id FROM table WHERE option='1' ORDER BY time LIMIT 1

然后在$id中使用id

代码语言:javascript
运行
复制
UPDATE table SET used='1' WHERE id='$id'

问题是,通过这种方式,另一个用户可以在同一时间更新相同的记录。只有一次手术才能做到这一点吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-25 20:39:05

代码语言:javascript
运行
复制
UPDATE table SET used='1' 
  WHERE id=
    (SELECT id FROM
         (SELECT id FROM table 
          WHERE option='1'
          ORDER BY time 
          LIMIT 1)    AS tmptable
    )
票数 3
EN

Stack Overflow用户

发布于 2013-08-25 20:47:11

如果不同用户对同一行具有并发访问权限,则需要使用三步查询。

  1. First查询必须为特定的用户保留行(使用专用字段)。
  2. 第二个查询必须,以检查行预订是否针对特定的用户
  3. 第三次查询更新行,知道没有冲突,因为用户保留了它。

在步骤1和步骤2之间,多个用户可以尝试获取对行的编辑访问,但最终只有一个成功。失败的人不会达到第三步。

PS:这可能对您的需要过于苛刻,但这是确保多个用户同时处理任务(行)的最佳方法。

PPS:或者将查询合并到一个单独的查询中,就像另一个答案指出的那样。但是,如果您的更新需要完成一些工作,最好在更新值之前预先决定由谁来完成该工作。

票数 2
EN

Stack Overflow用户

发布于 2013-08-25 20:43:48

您可以使用:http://php.net/manual/en/mysqli.insert-id.php

mysql_insert_id

找到最后一个更新或设置的id并存储它。然后我们检查以确保最后一个id不存在。

所以..。

代码语言:javascript
运行
复制
//last id being the id of the last query set or updated
$last_id = $mysql->insert_id;

if($last_id != $id) {
//execute code
{
else {

echo "last id already in database!";

}

如果我误解了这个问题,你应该仍然能够看到如何使用最后一个id来做你想做的事情。

下面是使用它的一个例子。首先使用创建ID的表单数据更新表,然后将输入复选框数组添加到最后更新的id中。

代码语言:javascript
运行
复制
//define input variables
$lesson_id = $_POST['lesson_id'];
$user_id = $_POST['user_id'];
$instructor_id = $_POST['instructor_id'];
$lesson_comments = $_POST['lesson_comments'];
$lesson_date = date("Y-m-d");
$video_ids = isset($_POST['checkbox']) ? $_POST['checkbox'] : array();  # this is  called a ternary operator

//insert lesson information first
$query ="INSERT INTO swing_viewer_lessons (lesson_id, user_id, instructor_id,      lesson_comments, lesson_date) VALUES (?, ?, ?, ?, ?)";
if ($stmt = $mysqli->prepare($query)) {
$stmt->bind_param("iiiss", $lesson_id, $user_id, $instructor_id, $lesson_comments,    $lesson_date);
$stmt->execute();
//printf($stmt->error);
echo "successful";
//echo "$last_id";
}

//insert lesson information
if (is_array($video_ids) && count($video_ids) > 0)
{
foreach($video_ids as $list);   
}   

// Make it into a comma separated list
$rec_ids = implode(',', $video_ids);    

//get last inserted id from above
$last_id= $mysqli->insert_id;

//finally query and update lesson information based on the last id added from above
$query ="UPDATE swing_viewer_lessons SET video_ids=? WHERE id=?";
if ($stmt = $mysqli->prepare($query)) {
$stmt->bind_param("si", $rec_ids, $last_id);
$stmt->execute();
}

希望这对你或者其他任何人都有帮助,就像我曾经在这件事上扯头发一样。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18433435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档