我真的需要帮助。我正在尝试基于uisng案例进行mysql更新,但我不认为我做对了。 这就是我想要实现的目标。 我有一个包含以下字段的表
user_id, rank, weekly, monthly, justwinners
1 9 0 0 0
2 29 0 0 0
3 8 0 0 0
4 10 0 0 0
5 12 0 0 0
我想要达到的目的是根据具体日期更新每周,每月和每月 假设我的开始日期是2011年7月7日。 $ startdate = 5-07-2011; 在12月20日的一周结束时,我想将最高排名的用户的每周字段更新为1.同时更新justwinners 接下来的3个用户的字段,排名最高为1。 在第二周结束时,现在是19/07/2011,我想更新具有最高等级的用户的每周字段,其值仍为“0”到2并且还更新 justwinners字段,其值仍为“0”到2。 这将持续到我将更新月度字段的一个月时间。 到目前为止,这是我能够提出的,但是没有用。
//Initiate the database connection here
function get_db_conn() {
$conn = mysql_connect(HOST, DB_USER, DB_PASSWORD) or die('Could not Connect!');
mysql_select_db(DATABASE, $conn) or die ('could not connect to database');
return $conn;
}
function updateWinners( $limit, $field ) {
$conn = get_db_conn();
switch($field) {
case "weekly" :
$limit = 1;
case "monthly" :
$limit = 1 ;
case "giftpack" :
$limit = 10 ;
default:
$limit = 1 ;
}
$sqlquery = "SELECT * FROM application rank DESC " ;
$sqlquery .= " where $field < 1 ";
$sqlquery .= " LIMIT $limit ";
$result = mysql_query($sqlquery);
$user_data = mysql_fetch_row($result);
if(isset($user_data)) {
$user_data = 0 ;
while($user_data){
$uid = $user_data(user_id);
$rank = $user_data(rank);
$query = "INSERT INTO application_winners (user_id, rank, date) VALUES ('$uid', '$rank' 'now()')";
mysql_query($query) or die('Error, insert winners query failed');
switch ($action) {
case "weekly":
$startdate = "5-07-2011";
$sqlquery = "UPDATE application SET weekly = CASE
WHEN (CURDATE() = (startdate * 7))
THEN weekly = '1'
WHEN (CURDATE() = (startdate * 14))
THEN weekly = '2'
WHEN (CURDATE() = (startdate * 30))
THEN weekly = '3'
ELSE weekly
END";
}
$user_data = $user_data + 1;
} //endwhile
}
else {
echo "Error in updating the winners";
}
}
如果你知道有任何更好的方法来实现它。请分享。
答案 0 :(得分:0)
正如一句话 - 你有一个插入后跟一个更新。您可以在插入部分中执行此操作。类似的东西:
$query = "INSERT INTO application_winners (user_id, full_name, rank, date, $field) VALUES ('$uid', '$user_fullname', '$rank' 'now()', '$updatevalue')";
mysql_query($query) or die('Error, insert winners query failed');
答案 1 :(得分:0)
我没有密切关注所有内容,但是您使用变量“$ action”代替第二个交换机,但它在代码中的任何其他位置都不存在..
答案 2 :(得分:0)
尝试更改:
$sqlquery = "UPDATE application SET weekly = CASE
WHEN (CURDATE() = (startdate * 7))
THEN weekly = '1'
WHEN (CURDATE() = (startdate * 14))
THEN weekly = '2'
WHEN (CURDATE() = (startdate * 30))
THEN weekly = '3'
ELSE weekly
END";
为:
$sqlquery = "UPDATE application SET weekly = CASE
WHEN (CURDATE() = (startdate * 7))
THEN '1'
WHEN (CURDATE() = (startdate * 14))
THEN '2'
WHEN (CURDATE() = (startdate * 30))
THEN '3'
ELSE weekly
END";