2012-07-08 47 views
1

我正在爲Magic the Gathering Cards創建庫存系統,需要使用主卡信息更新價格。JOIN,UNION,MERGE?

我有兩個表,卡和價格

卡具有以下欄目: ID,名稱,版,價格

價格有以下欄目: 名稱,版,價格

我需要將Cards.Price替換爲Prices.Price中的值。

下面是代碼爲兩個不同的嘗試,使這項工作(我知道我可能使這變得更加困難比它需要的是....)

嘗試#1

$query = "SELECT * FROM Cards"; 

    $result = mysql_query($query) or die(mysql_error()); 
    $row = mysql_fetch_array($result) or die(mysql_error()); 

    while($row = mysql_fetch_array($result)) 
    { 
    $name=$row['Name']; 
    $ed=$row['Ed']; 

    $queryb = "SELECT Price FROM Prices WHERE Name='".$name."' AND Ed='".$ed."'"; 
    $resultb = mysql_query($queryb) or die(mysql_error()); 
    $rowb = mysql_fetch_array($resultb) or die(mysql_error()); 
    $newPrice = $rowb['Price']; 
    mysql_query("UPDATE Cards SET Price='".$newPrice."'"); 
    } 

嘗試#2

$queryCards = "SELECT * FROM Cards"; 
    $queryPrices = "SELECT * FROM Prices"; 
    $dblink = mysql_connect($dbhost, $dbuser, $dbpass); 
    mysql_select_db($dbname, $dblink); 


    $resultCards = mysql_query($queryCards) or die(mysql_error()); 
    $resultPrices = mysql_query($queryPrices) or die(mysql_error()); 
    $rowCards = mysql_fetch_array($resultCards) or die(mysql_error()); 
    $rowPrices = mysql_fetch_array($resultPrices) or die(mysql_error()); 



    if ($rowCards['Name']==$rowPrices['Name'] && $rowCards['Ed']==$rowPrices['Ed']) 
    { 
    $newPrice = $rowPrices['Price']; 
    mysql_query("UPDATE Cards SET Price='".$newPrice."' WHERE 
    Name='".$rowCards['Name']."' AND Ed='".$rowCards['Ed']."'"); 
    } 
    while($rowPrices = mysql_fetch_array($resultPrices)) 
     { 
     if ($rowCards['Name']==$rowPrices['Name'] && 
        $rowCards['Ed']==$rowPrices['Ed']) 
      { 
      $newPrice = $rowPrices['Price']; 
      mysql_query("UPDATE Cards SET Price='".$newPrice."' WHERE 
         Name='".$rowCards['Name']."' AND Ed='".$rowCards['Ed']."'"); 
      } 
     }  

    $rowPrices = mysql_fetch_array($resultPrices) or die(mysql_error()); 

    while($rowCards = mysql_fetch_array($resultCards)) 
    { 
    while($rowPrices = mysql_fetch_array($resultPrices)) 
     { 
     if ($rowCards['Name']==$rowPrices['Name'] && 
       $rowCards['Ed']==$rowPrices['Ed']) 
      { 
      $newPrice = $rowPrices['Price']; 
       mysql_query("UPDATE Cards SET Price='".$newPrice."' WHERE 
        Name='".$rowCards['Name']."' AND Ed='".$rowCards['Ed']."'"); 
       } 
       }  
    } 
+0

你有過表結構控制?您應該將價格表上的外鍵放在卡表上。然後你可以運行sql語句:「更新卡片加入價格card.id = price.card_id set cards.price = price.price」。 – 2012-07-08 04:43:34

+0

表格結構很難保持一致。卡片來自gatherer.wizards.com數據庫。我可以在第三方程序的幫助下下載數據庫中的ID。價格來自http://magic.tcgplayer.com/magic_price_guides.asp,並且沒有給出id。我手抄了價格,最終需要自動化這個。 – user1509556 2012-07-08 05:36:01

回答

0
UPDATE Cards 
    JOIN Prices ON Cards.Name = Prices.Name AND Cards.Ed = Prices.Ed 
SET Cards.Price = Prices.Price 
+0

我試過了,它花了幾秒鐘的時間處理,但卡表中的價格仍然是空白的。忘了提及,希望Card.Price字段目前都是空白的並不重要。 – user1509556 2012-07-08 05:39:07

+0

我不得不重新格式化文本,它工作正常。在價格表字段的開頭有一個垃圾字符。謝謝你的幫助。 – user1509556 2012-07-09 00:54:12