我有一个数据库我正在更新,当我更改一个症状时,我希望它将症状严重性行中的所有值重置为0,但是当我更新该症状时,它设置所有行到0,而不仅仅是那一行。这是我的代码,我在if语句中做到了。如果您知道一种更简单的方法,那么也会非常感激。
我没有使用WHERE,因为我想要更改所有id,而不仅仅是一个,并且它会动态生成它们。我有20个症状,仅在数据库中的ID 1中更新。对不起,如果代码很糟糕,我对此很新。
如果我一次更新所有20个,那很好,但如果我只更新一个或两个,它们都会被设置回0。
mysql_select_db("$database", $conn) or die(mysql_error());
// if statements to delete this and that
$db="$id"."_symp";
$sql2 = "SELECT * FROM $db";
$getit = mysql_query ( $sql2, $conn );
// I know I'm using outdated SQL, but it works for me, so I keep using it
while($row = mysql_fetch_array($getit, MYSQL_ASSOC))
{
//symptom 1
if ($_POST[symptom1] == $row[symptom1]) {
print " ";
}
else {
mysql_query("UPDATE $db SET symptom1_sev = '0'") OR die(mysql_error());
}
//symptom 2
if ($_POST[symptom2] == $row[symptom2]) {
print " ";
}
else {
mysql_query("UPDATE $db SET symptom2_sev = '0'") OR die(mysql_error());
}
//symptom 3
if ($_POST[symptom3] == $row[symptom3]) {
print " ";
}
else {
mysql_query("UPDATE $db SET symptom3_sev = '0'") OR die(mysql_error());
}
//and so on to 20
//symptom 20
if ($_POST[symptom20] == $row[symptom20]) {
print " ";
}
else {
mysql_query("UPDATE $db SET symptom20_sev = '0'") OR die(mysql_error());
}
//end sql stuff
}
// update the database
$sql="UPDATE $db SET
symptom1='$_POST[symptom1]', symptom2='$_POST[symptom2]', symptom3='$_POST[symptom3]', symptom4='$_POST[symptom4]', symptom5='$_POST[symptom5]', symptom6='$_POST[symptom6]', symptom7='$_POST[symptom7]', symptom8='$_POST[symptom8]', symptom9='$_POST[symptom9]', symptom10='$_POST[symptom10]', symptom11='$_POST[symptom11]', symptom12='$_POST[symptom12]', symptom13='$_POST[symptom13]', symptom14='$_POST[symptom14]', symptom15='$_POST[symptom15]', symptom16='$_POST[symptom16]', symptom17='$_POST[symptom17]', symptom18='$_POST[symptom18]', symptom19='$_POST[symptom19]', symptom20='$_POST[symptom20]'
WHERE id=1" OR die(mysql_error());
mysql_select_db('$database');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
非常感谢。对不起我就是这样的n00b。或者一个nob,无论你喜欢给我打电话!
提前感谢您的帮助。
答案 0 :(得分:1)
您可以使用以下查询一步更新所有症状:
$symptom1 = mysql_real_escape_string($_POST['symptom1']);
$symptom2 = mysql_real_escape_string($_POST['symptom2']);
...
$symptom20 = mysql_real_escape_string($_POST['symptom20']);
$sql = "
UPDATE $db
SET symptom1_sev = IF(symptom1 = '$symptom1', 0, symptom1_sev),
symptom2_sev = IF(symptom2 = '$symptom2', 0, symptom2_sev),
...
symptom20_sev = IF(symptom20 = '$symptom20', 0, symptom20_sev)";
答案 1 :(得分:0)
我有一个数据库我正在更新,当我改变一个症状时, 我希望它将症状严重性行中的所有值重置为0, 但是当我更新那个症状时,它将所有行设置为0, 而不只是那一行。
您的代码调用UPDATE
而没有WHERE
子句。没有UPDATE
的{{1}}将始终每次更新整个表格中的每个行。
我没有使用WHERE,因为我希望更改所有id, 不只是一个,它正在动态生成它们。 我有20个症状,仅在数据库中的ID 1中更新。 对不起,如果代码很糟糕,我对此很新。
您希望在一个行中更新20个列?精细。您仍然需要WHERE
子句,只需在WHERE
语句中添加更多列。 (或者考虑使您的数据库架构更有用)
PS - 如果这仍然听起来不对,请考虑与我们共享您的数据库架构(相关表的表名和列名/类型)。
这些查询中的每一个都是错误的,并且会改变每一行:
UPDATE
最后,如果清除其他行中的严重性你想要什么,那么你永远不会在任何地方实际设置严重性,即使对于当前行也是如此。 (那为什么不总是0?)
e.g。 //symptom 1
if ($_POST[symptom1] == $row[symptom1]) {
print " ";
}
else {
mysql_query("UPDATE $db SET symptom1_sev = '0'") OR die(mysql_error());
}
永远不会发生。