【发布时间】:2014-03-17 14:36:39
【问题描述】:
我想用 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];
现在是棘手的部分。 如果它们的file_version高于给定ID的file_version,我想将所有文档的file_version设置为与给定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 语句吗?
提前致谢。
【问题讨论】:
-
这是旧版应用程序吗?否则没有理由你应该使用非常过时的
mysql_query接口。 -
您为什么不在另一个表中将
file_version设置为MAX(file_version),以获取具有相同name的所有条目?您在这里的要求很难满足。为什么ID - 1? -
尽管您没有使用
PDO(因为您确实应该使用),但您应该尝试使用SET field = field - 1增加计数。 -
+1 用于正确评估自己迄今为止的努力。 ;-)