将mysql表从单个输入更新到不同的列

时间:2012-07-07 12:30:13

标签: php mysql

我有一个名为dircode的表格:

CREATE TABLE dircode (
  jobcodeid int(11) NOT NULL AUTO_INCREMENT,
  jobcodeserial varchar(255) NOT NULL,
  jobcode1 varchar(255) NOT NULL,
  codestatus1 varchar(60) NOT NULL,
  jobcode2 varchar(255) NOT NULL,
  codestatus2 varchar(60) NOT NULL,
  jobcode3 varchar(255) NOT NULL,
  codestatus3 varchar(60) NOT NULL,
  jobcode4 varchar(255) NOT NULL,
  codestatus4 varchar(60) NOT NULL,
  PRIMARY KEY (jobcodeid)
)

用户可能拥有最多4个单一序列号的作业代码。 当用户输入目录序列号和一个代码时,我希望将特定作业的codestatus更新为'Used'。其余数据应保持不变。 例如,当用户输入序列号并jobcode3时,codestatus3的状态应更新为'Used'。 请帮我编写上述查询的PHP代码。

1 个答案:

答案 0 :(得分:0)

正如你所说,你需要UPDATE这一行。

您试图首先查看输入的代码是1,2,3或4(例如jobcode3),然后设置该代码的状态(在本例中为codestatus3)。要做到这一点,我会(或者不会,见下文)将整行作为associative array并在代码中计算出索引(检查每个作业代码,找到代码并从列名中提取索引) )。

然后connect到MySQL服务器,execute a query像这样:

$columName = "codestatus" . $theCorrectIndex;
mysql_query(sprintf("UPDATE dircode SET %s = 'Used' WHERE jobcodeid = %d",
                      $columName,$dircodeId));

检查布尔返回。如果是false,请检查details on the error

(或者,您可以将所有这些放在SQL查询中,请参阅this questionthis和MySQL的control flow functions。)

这不是一个非常好的解决方案。您可能想要考虑使用列codesid和外键列{创建另一个表status {1}}所以你要避免将索引放入列名中(通常不是一个好主意)。

此外,还有很多关于此问题的文档(MySQLPHPSO)。