我有以下代码,每当用户“喜欢”比赛(这是一个帖子)时,用userID,值(喜欢或不喜欢)和提醒日期更新我的数据库。
$ 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.由于前两次和后两次它没有,代码插入根据echo 4,当它在第3个循环时,它根据echo 3插入,因为匹配。
现在,我知道in_array()但不知道如何在我的mysql查询的上下文中使用它。我怀疑这可能是解决方案......
有人可以帮忙吗?
答案 0 :(得分:3)
这变得过于混乱,但我正在猜测。
您想在“345”条目的结果集中进行搜索,如果找到了,请执行某些操作,如果没有,请执行其他操作,对吧?
嗯,不管怎样,以下是array_search();
:
$resultSet= mysql_get_assoc($getfreq);
if ( array_search(345,$resultSet) !== false )
{
# - 345 Is here!!! -
//do what you gotta do...
}
else
{
# - 345 is not in $resultSet -
//do something else here
}
答案 1 :(得分:2)
我认为循环中没有错误。
您永远不会更新插入SQL中的任何变量。
我的意思是 - 你说你在$ getfreq中有5个值,第三个是345,因此将发生带有“3”的分支,在所有其他情况下,将发生带有“4”的分支。其他变量都没有改变过。
你进入这个分支
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());
}
在第三种情况下,它进入“3”分支并插入。
但是,在所有其他情况下,执行此行
mysql_query("INSERT INTO userContests (userID, contestID, value, reminder) VALUES ('$userID', '$contestID', '$value', CURDATE()) ") or die(mysql_error());
因为你在else
分支中拥有它。
如果您根本不想进行循环,只想检查一次,则必须执行以下操作。
$getfreq = mysql_query("
SELECT COUNT(taxonomy_id) AS freq
FROM wp_term_relationships
WHERE wp_term_relationships.object_id = $contestID
AND wp_term_relationshis.taxonomy_id = 345
");
$data = mysql_fetch_assoc($getfreq);
if ($data['freq'] > 1) {
//do something
} else {
//do something else
}
我希望我能正确地写出来,因为我是从头顶开始做的。)
如果要检查多个值,请尝试以下操作:
$getfreq = mysql_query("
SELECT DISTINCT term_taxonomy_id
FROM wp_term_relationships
WHERE wp_term_relationships.object_id = $contestID
");
while ($row = mysql_fetch_assoc($getfreq)) {
$taxonomy_id = $row[term_taxonomy_id];
$seen[$taxonomy_id] = 1;
}
if ($seen[334]) {
//something
} else if ($seen[456]) {
//something else
} else {
//last branch
}