Php 基于给定ID使用相同值更新表
我想用mySQL更新一个表,其中的行与给定ID的名称同名,并增加和减少它们的文件版本 该函数应还原文件的旧版本 我的桌子看起来像这样:Php 基于给定ID使用相同值更新表,php,mysql,sql,Php,Mysql,Sql,我想用mySQL更新一个表,其中的行与给定ID的名称同名,并增加和减少它们的文件版本 该函数应还原文件的旧版本 我的桌子看起来像这样: ID | name | file_version 1 | book-1 | 1 2 | book-1 | 2 3 | book-1 | 3 4 | book-2 | 1 该函数提供变量$docId和$fileVersion 首先,我在表中搜索max.
ID | name | file_version
1 | book-1 | 1
2 | book-1 | 2
3 | book-1 | 3
4 | book-2 | 1
该函数提供变量$docId和$fileVersion
首先,我在表中搜索max.file_版本并将其存储在变量中
$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的文件版本设置为max
$query2 = 'SELECT file_version FROM dscQm_docs WHERE id='.$docId.';';
$result2 = mysql_query($query2);
$row = mysql_fetch_row($result2);
$fileVersion = $row[0];
现在是棘手的部分。
如果所有文档的文件版本高于给定ID的文件版本,我想将其文件版本设置为与给定ID的名称相同的文件版本-1
以下是我的方法:
$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语句吗
提前谢谢
$query4 = '
UPDATE myTable SET file_version = file_version -1 WHERE name like (
SELECT name FROM myTable
WHERE id = '.$docId.' AND file_version > '.$fileVersion.'
)';
试试这个
编辑:如果你知道这个名字,为什么不只比较一下名字呢
比如:
$query4 = "UPDATE myTable SET file_version = file_version -1 WHERE name like '$name'";
编辑2:你为什么不工作?而不是使用这么多不同的查询?要始终获得1个值。。。然后,您可以同时存储与一行相关的所有数据。尝试此操作,您将避免使用子查询的非常可怕的IN运算符(至少可以说,它们有时效率低下)
这是一个遗留应用程序吗?否则,您没有理由使用非常过时的
mysql\u查询
界面。为什么不在另一个表中将file\u version
设置为MAX(file\u version)
,用于所有具有相同名称的条目?你在这里的要求很难遵守。为什么ID-1
?尽管事实上你没有使用PDO
(因为你真的应该这么做),但你应该尝试使用SET field=field-1
+1来增加计数,以正确评估你迄今为止的努力
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*