php - 根据给定的 ID 使用相同的值更新表

标签 php mysql sql

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

该函数应该恢复文件的旧版本。

我的表格是这样的:

ID    |    name    |    file_version
1     |  book-1    |    1
2     |  book-1    |    2
3     |  book-1    |    3
4     |  book-2    |    1

该函数给出变量 $docId 和 $fileVersion。

首先我搜索最大值。表中的 file_version 并将其存储在变量中。

$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 设置为最大。

$query2 = 'SELECT file_version FROM dscQm_docs WHERE id='.$docId.';';
$result2 = mysql_query($query2);
$row = mysql_fetch_row($result2);
$fileVersion = $row[0];

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

这是我的方法:

    $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 语句吗?

提前致谢。

最佳答案

试试这个,您将避免使用子查询时令人生畏的 IN 运算符(至少可以说,它们有时效率很低)!

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*

关于php - 根据给定的 ID 使用相同的值更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22457174/

相关文章:

MySQL 搜索查询 INNER JOIN 将 id_image 字段结果限制为每个 id_product 1 个

sql - 如何使用我在 select 子句中创建的列?

mysql - 如何使用两列得到第三列的结果

php - 如何以最有效的方式使用 SQL 处理非常大的表

php - 在 PHP MVC 应用程序中在哪里捕获异常?

javascript - 带有外部 ajax 数据的图表 PHP

php - 如何从 mysql 值构造 URL(自动过程)

使用 GROUP BY 时 MySQL 查询速度慢

mysql - 为什么Mysql JOIN查询-完整扫描不使用索引

PHP - 错误的选择 - 查询