ユーザーがコンテスト(投稿)を「いいね」するたびに、ユーザーID、値(好きまたは嫌い)、およびリマインダー日付でデータベースを更新する次のコードがあります。
$query は私の userContests テーブルを見て、その内容全体を保存します。
userContests テーブルには、userID、値 (好きか嫌いか)、contestID、およびリマインダーの日付が格納されます。
$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 かどうかを確認するためだと推測しました。最初の 2 回と最後の 2 回はそうでないため、コードは echo に従って挿入されます4 3 番目のループでは、一致があるため、エコー 3 に従って挿入されます。
今、私は in_array() を認識していますが、mysql クエリのコンテキストでそれを使用する方法がわかりません。これが解決策になるのではないかと思います...
誰でも助けることができますか?