2011-07-05 55 views
0

我真的需要這方面的幫助。我試圖做一個基於uisng的情況下的MySQL更新,但我不認爲我得到它的權利。 這是我想要實現的。 我有以下字段基於case語句更新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 

什麼我想要實現的是更新根據特定的日期,每週,每月和justwinners領域 可以說我有2011年5月7日開始日期的表。 $ startdate = 5-07-2011; 在2011年12月7日的一週結束時,我想將最高排名的用戶的每週字段更新爲1.同時,將最高排名的下一個3用戶的justwinners 字段更新爲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

就像一句話 - 你有一個插入後跟一個更新。你可以在插入部分做到這一點。喜歡的東西:

$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'); 
0

我沒有一切仔細看,但你使用的是變量「$行動」第二開關,但它不會在你的代碼中存在其他地方..

+0

是的,沒有任何地方的行動,其實我真的不知道我DOI在這些代碼行中。我只需要幫助如何最好地實現我的系統,而不必看我迄今爲止所做的。 – stanley

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"; 
+0

感謝您的貢獻,但我真的需要幫助如何最好地實現這一點。我不認爲我知道我在這些代碼行中做了什麼。 – stanley