首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据给定的ID更新具有相同值的表

根据给定的ID更新具有相同值的表
EN

Stack Overflow用户
提问于 2014-03-17 22:36:39
回答 2查看 166关注 0票数 2

我想用mySQL更新一个表,其中行的名称与给定ID的名称相同,并增加和减少它们的file_version。

该函数应还原文件的较旧版本。

我的表看起来像这样:

代码语言:javascript
复制
ID    |    name    |    file_version
1     |  book-1    |    1
2     |  book-1    |    2
3     |  book-1    |    3
4     |  book-2    |    1

该函数提供变量$docId和$fileVersion。

首先,我搜索最大值。file_version并将其存储在一个变量中。

代码语言:javascript
复制
$query = 
'SELECT max(file_version) FROM myTable where doc_name in (
    SELECT doc_name FROM myTable
WHERE id = '.$docId.');';
$result1 = mysql_query($query);
$row = mysql_fetch_row($result1);
$maxVersion = $row[0];

之后,我将所需ID的file_version设置为max。

代码语言:javascript
复制
$query2 = 'SELECT file_version FROM dscQm_docs WHERE id='.$docId.';';
$result2 = mysql_query($query2);
$row = mysql_fetch_row($result2);
$fileVersion = $row[0];

现在到了棘手的部分。如果所有文档的file_version高于给定ID的file_version,我希望将它们的file_version设置为与给定ID的名称相同的名称-1。

以下是我的方法:

代码语言:javascript
复制
    $query4 = '
        UPDATE myTable SET file_version = file_version -1 WHERE( 
        SELECT * FROM myTable 
        WHERE name in (
           SELECT name FROM myTable
           WHERE id = '.$docId.' AND file_version > '.$fileVersion.'
        );
    ';

这不管用。

对不起..我对SQL不太在行。我知道这是废话。

你能帮我解决最后一条SQL语句吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-03-17 22:42:26

代码语言:javascript
复制
$query4 = '
        UPDATE myTable SET file_version = file_version -1 WHERE name like (
           SELECT name FROM myTable
           WHERE id = '.$docId.' AND file_version > '.$fileVersion.'
        )';

尝尝这个?

编辑:如果你知道名字,为什么不只比较名字呢?

像这样:

代码语言:javascript
复制
 $query4 = "UPDATE myTable SET file_version = file_version -1 WHERE name like '$name'";

EDIT2:你为什么不做面向对象的工作呢?而不是使用这么多不同的查询?要始终获得1个值...然后,您可以同时存储与一行相关的所有数据。

票数 0
EN

Stack Overflow用户

发布于 2014-03-17 23:06:22

尝试这样做,您将避免使用子查询使用非常可怕的IN操作符(至少可以说,它们有时效率很低)!

代码语言:javascript
复制
update myTable as t1
left join myTable as t2 on (t1.name = t2. name)
set t2.file_version = t2.file_version -1
where t2.file_version > t1.file_version
and t1.id = *YOUR_ID*
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22457174

复制
相关文章

相似问题

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