基于case语句更新mysql数据库

时间:2011-07-05 07:55:42

标签: php mysql

我真的需要帮助。我正在尝试基于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";
    }

}

如果你知道有任何更好的方法来实现它。请分享。

3 个答案:

答案 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";