2012-05-05 14 views
0

好了,這已經被修改還有3桌板,賬號,登錄PHP/MySQL的插入信息,如果標識的匹配否則插入不同的信息

感謝布賴恩Moyles他那種給我一種頓悟

這裏是我的代碼

$query=$S->query(" 
    SELECT 
     `TBL`.`LAcc`, 
     `TBL`.`AId`, 
     `TBL`.`Add`, 
     `TBL`.`Lost`, 
     `TBL`.`LDate`, 
     `TBL`.`FDate` 

     FROM (
      SELECT 
       (SELECT SUM(`Add`) FROM `m_rules` GROUP BY `Group`) AS `Add`, 
       `S`.`Account` as `LAcc`, 
       `P`.`Id` as `AId`, 
       SUM(`S`.`Loss`*`S`.`Multiple`) AS `Lost`, 
       MAX(`S`.`Timestamp`) AS `LDate`, 
       MIN(`S`.`Timestamp`) AS `FDate` 
        FROM `log` AS S,`account` AS P 

      GROUP BY `P`.`Id` 
     ) as `TBL` 
     WHERE `TBL`.`FDate` <= NOW() 
     AND `TBL`.`LDate` >= DATE_SUB(NOW(), INTERVAL 1 DAY) 

") or die(mysql_error()); 

    while($Log=$S->fetch($query)) { 

     if($Log['AId']==$Log['LAcc']) { 
      $Score=$Log['Add']-$Log['Lost']; 
     } else { 
      $Score='Bonus'; 
     } 

     /* 
      echoing to see results 
     */ 
     echo $Log['AId'].' : '.$Score.'<br />'; 

     /* 
     This is what the query would look like Thanks to Bryan Moyles, 

     $S->query("INSERT INTO `board` (`Account`,`Score`, `Date`)VALUES('".$Log['Id']."', '".$Score."', 'NOW()') ON DUPLICATE KEY UPDATE Score = '".$Score."'"); 
     */ 
    } 

在這裏你去的所有結果:組按帳戶ID

Account Id:4, Log Account:5, Add: 97.64236, Lost:141.11371 LastDate:2012-05-04 22:07:46, FirstDate:2012-05-04 22:05:48, Score:Bonus 
Account Id:5, Log Account:5, Add: 97.64236, Lost:141.11371 LastDate:2012-05-04 22:07:46, FirstDate:2012-05-04 22:05:48, Score:-43.47135 
Account Id:6, Log Account:5, Add: 97.64236, Lost:141.11371 LastDate:2012-05-04 22:07:46, FirstDate:2012-05-04 22:05:48, Score:Bonus 
Account Id:7, Log Account:5, Add: 97.64236, Lost:141.11371 LastDate:2012-05-04 22:07:46, FirstDate:2012-05-04 22:05:48, Score:Bonus 
Account Id:8, Log Account:5, Add: 97.64236, Lost:141.11371 LastDate:2012-05-04 22:07:46, FirstDate:2012-05-04 22:05:48, Score:Bonus 

GROUP BY登錄帳戶ID

Account Id:4, Log Account:4, Add: 97.64236, Lost:119.67095 LastDate:2012-05-04 22:07:46, FirstDate:2012-05-04 22:06:29, Score:-22.02859 
Account Id:4, Log Account:5, Add: 97.64236, Lost:542.30295 LastDate:2012-05-04 22:06:54, FirstDate:2012-05-04 22:05:48, Score:Bonus 
Account Id:4, Log Account:6, Add: 97.64236, Lost:43.59465 LastDate:2012-05-04 22:07:06, FirstDate:2012-05-04 22:07:06, Score:Bonus 

我看到的問題只是不知道該解決方案的..

解決了!

我在原來的查詢替換

FROM `log` AS S,`account` AS P 

隨着

FROM `account` AS `P` LEFT JOIN `log` AS `S` ON `P`.`Id`=`S`.`Account` 

(我修改,並改變了它在這之前),我有賬號並登錄反向與P一起。 Id = SAccount哪些沒有工作,所以我只是交換日誌和帳戶,它的工作..不能相信這是問題,但謝謝你的幫助。

回答

1

我不確定你會如何遇到日誌不存在的情況,因爲你正在從查詢結果中構建數據。但是,您要插入主鍵,並且可以捕獲重複的鍵錯誤,並相應地運行更新。

看看這篇文章 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

$S->query("INSERT INTO `board` (`Account`,`Score`, `Date`)VALUES('".$Log['Id']."', '".$Score."', 'NOW()') ON DUPLICATE KEY UPDATE Score = '".$Score."'"); 
+0

爲什麼我補充說,自己昨天我的腦袋是不是正確的,但感謝你的幫助,說實話我不知道。 – Rycore

+0

好吧,所以我做了一些閱讀和理解這個字符串在做什麼,這將是非常有用的,而不是有兩個查詢插入和更新,雖然我可以在查詢中使用它,而不是在尋找什麼。基本上在表日誌中有一個稱爲帳戶的字段,它是表帳戶的ID,如果它們匹配,那麼我希望它提交分數,但如果日誌帳戶不匹配帳戶表中的ID,那麼我想添加不同的信息,例如獎勵點數。對不起,如果我的帖子中不夠清楚。 – Rycore

+0

好吧,所以我根據我目前提供的一些結果修改了我的帖子,但沒有做它的意思。希望你有我的問題的答案再次謝謝 – Rycore