2013-10-24 52 views
1

我想優化這個支票,我有。我需要檢查表中的行,看看是否有任何行匹配了Earned和Maxearned值(只有位置1,2,3,4的行)。如果他們這樣做,我需要從該行中獲取獎勵,將其寫入名爲bank的另一個表中,並從表中刪除名爲lines的行。這是我有:PHP優化支票

$sql3 = "SELECT * FROM `lines` WHERE Position <= 4 AND Linenum = '$linenum' AND Earned = Maxearned"; 
$result3 = mysql_query($sql3); 
if (mysql_num_rows($result3) != 0) 
{ 
while ($row3 = mysql_fetch_array($result3)) 
{ 
$users[] = $row3['User']; 
    } 
    foreach ($users as $user) 
    { 
    $sql6 = "SELECT * FROM `lines` WHERE Position <= 4 AND Linenum = '$linenum' AND Earned = Maxearned AND User = '$user'"; 
    $result4 = mysql_query($sql6); 
    while ($row4 = mysql_fetch_array($result4)) 
    { 
     $earned = $row4['Earned']; 
    } 
    $today = date("Y-m-d"); 
    $method = "Queue money"; 
    $type = "Earned"; 
    $status = "Completed"; 
    $sql4 = "INSERT INTO bank (User,Amount,Method,Transdate,Type,Status) VALUES ('$user','$earned','$method','$today','$type','$status')"; 
    $sql5 = "DELETE FROM `lines` WHERE Position <= 4 AND Linenum = '$linenum' AND Earned = Maxearned AND User = '$user'"; 
    } 
    $sql7 = "UPDATE `lines` SET Position = Position - 1 WHERE Linenum = '$linenum'"; 
    } 

我試圖避免運行一個不同的查詢($ sql6,之後的一段時間)搶掙列的值。有沒有辦法做到這一點?我已經嘗試了一切,這幾乎是我想出的最好的。

+0

我知道我沒有運行'mysql_query($ sql4,5,6,7)'這只是一個dev版本 –

+0

@ user2864740實際上,沒有這個,他們會獲得無限的金錢instea d他們應該如何^^ –

+0

贊@ user2864740表示,發佈你的模式。然後閱讀此:http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – Cfreak

回答

2

你可以做這樣的事情:

mysql_query("SET AUTOCOMMIT=0"); 
    mysql_query("START TRANSACTION"); 

    $sql3 = "SELECT * FROM `lines` WHERE Position <= 4 AND Linenum = '$linenum' AND Earned = Maxearned"; 
    $result3 = mysql_query($sql3); 
    if (mysql_num_rows($result3) != 0) 
    { 
     while ($row3 = mysql_fetch_array($result3)) 
     { 
      $users[] = $row3['User']; 
     } 
     $users_to_compare = "(" . rtrim(implode(",", $users),',') . ")"; 
     $sql4 = "SELECT * FROM `lines` WHERE Position <= 4 AND Linenum = '$linenum' AND Earned = Maxearned AND User IN $users_to_compare"; 

     $result4 = mysql_query($sql4); 
     while ($row4 = mysql_fetch_array($result4)) 
     { 
      $earned = $row4['Earned']; 
      $today = date("Y-m-d"); 
      $method = "Queue money"; 
      $type = "Earned"; 
      $status = "Completed"; 
      $sql5 = "INSERT INTO bank (User,Amount,Method,Transdate,Type,Status) VALUES ('{$row4['User']}','$earned','$method','$today','$type','$status')"; 
      $result5 = mysql_query($sql5);    
     } 
     $sql6 = "DELETE FROM `lines` WHERE Position <= 4 AND Linenum = '$linenum' AND Earned = Maxearned AND User IN $users_to_compare"; 
     $result6 = mysql_query($sql6); 
     $sql7 = "UPDATE `lines` SET Position = Position - 1 WHERE Linenum = '$linenum'"; 
     $result7 = mysql_query($sql7); 

     if ($result5 && $result5 && $result7) { 
      mysql_query("COMMIT"); 
     } else {   
      mysql_query("ROLLBACK"); 
     } 
    } 

往前一步,你也可以使用Batch INSERT你插入查詢

注意:不要忘了mysql_ *版本depreceated你應該使用mysqli_ *

+0

交易plz。 –

+0

@ ta.speot.is快速編輯它,但命名需要改進..我只是按照OP的訂單 – Deepak

+0

修正了這一點。 – Deepak