我有以下代码,它使用用户 ID、值(喜欢或不喜欢)和提醒日期来更新我的数据库,只要用户“喜欢”比赛(这是一个帖子)。
$query 查看我的 userContests 表并存储它的全部内容。
userContests 表存储用户 ID、值(喜欢或不喜欢)、竞赛 ID 和提醒日期。
$getfreq 是一个包含值 123、234、345、456、567 的数组
我希望代码能够自行解释,我已尽力为您评论每个部分。这里的基本点是,如果 $getfreq 包含值 345,则使用提醒日期插入或更新我的数据库。
$userID = 1;
$value = 1;
$contestID = 1737;
if (($userID > 0) && ($contestID > 0) && ($value < 2)){
$query = mysql_query("SELECT * FROM userContests WHERE userID='$userID' AND contestID='$contestID';") or die(mysql_error());
$getfreq = mysql_query("
SELECT wp_term_relationships.term_taxonomy_id
FROM wp_term_relationships
WHERE wp_term_relationships.object_id = $contestID
");
while ($row = mysql_fetch_assoc($getfreq)) {
if ($value == 1){ // If the contest is liked
if (mysql_num_rows($query) > 0) { //if a value matching the userID and contest ID already exists in database
if ($row[term_taxonomy_id] == 345) { // if Daily entry, update the row with reminder date
echo "1";
mysql_query("UPDATE userContests SET value='$value', reminder= DATE_ADD(CURDATE(),INTERVAL 1 DAY) WHERE userID='$userID' AND contestID='$contestID';") or die(mysql_error());
$frequency = 'Daily';
} else { // if anything other than above, insert the row with current date
echo "2";
mysql_query("UPDATE userContests SET value='$value', reminder= CURDATE() WHERE userID='$userID' AND contestID='$contestID';") or die(mysql_error());
}
} else { // if there is no previous row in database matching userID and contestID
if ($row[term_taxonomy_id] == 345) { // if Daily entry, insert the row with reminder date
echo "3";
mysql_query("INSERT INTO userContests (userID, contestID, value, reminder) VALUES ('$userID', '$contestID', '$value', 'DATE_ADD(CURDATE(),INTERVAL 1 DAY)') ") or die(mysql_error());
} else { // if anything other than above, insert the row with current date
echo "4";
mysql_query("INSERT INTO userContests (userID, contestID, value, reminder) VALUES ('$userID', '$contestID', '$value', CURDATE()) ") or die(mysql_error());
}
}
} else if ($value == 0){ // if the value is disliked
if (mysql_num_rows($query) > 0) { //if a value matching the userID and contest ID already exists in database, simply update the row without reminder
echo "5";
mysql_query("UPDATE userContests SET value='$value' WHERE userID='$userID' AND contestID='$contestID';") or die(mysql_error());
} else { // if there is no previous row in database matching userID and contestID, simply insert the row without reminder
echo "6";
mysql_query("INSERT INTO userContests (userID, contestID, value) VALUES ('$userID', '$contestID', '$value') ") or die(mysql_error());
}
}
}
}
我的代码有效。有点。我的问题是插入代码在我的数据库中插入了 5 次。我只希望它插入一次。
代码中的回声用于调试。我收到 4 4 3 4 4 作为回声。
我知道问题是因为循环,但我不知道如何解决问题。
我推断它插入代码 5 次的原因是因为代码循环时,它会检查 $row = 345。由于前两次和最后两次没有,代码按照 echo 插入4 在第三个循环中,它根据 echo 3 插入,因为存在匹配项。
现在,我知道 in_array() 但不知道如何在我的 mysql 查询的上下文中使用它。我怀疑这可能是解决方案...
任何人都可以帮忙吗?