2012-04-15 93 views
0

由於我離php的專家很遠,這讓我驚呆了,我似乎無法爲它製作腳本。複製一個表到另一個不同的柱面計數

讓我們看看我能否儘可能清楚地解釋這一點。

可以說我有Table 1和Table

Table1 = (teamid, name, round1pos, round1score, round2pos, round2score)

Table2 = (id, tournamentid, teamid, name, round1pos, round1score, round2pos, round2score...till round10pos/round10score)

當從表1複製到表2,我想在它前面加2場。 (ID和旅遊名稱)

我面臨的問題是Table1每次都有不同數量的roundxpos/roundxscore。

基本上我想要做的就是一旦錦標賽結束我想刪除表格。但將其中的數據複製到另一個表中以存檔結果。但每場比賽可以有不同的輪次。

我希望有人能夠理解我想要達到的目標+ _ +。

+1

這聽起來像一個非常糟糕的桌子設計。你可以改變它嗎? – 2012-04-15 08:34:19

+0

你可以嘗試規範你的數據庫,所以你不必使用roundX任何東西,而是使用另一個關聯的表(以tournamentID作爲外鍵)。另外,我從來沒有見過需要「刪除」一個表本身就可以作爲檔案),尤其是因爲數據庫用戶可能沒有執行該命令的權限(只有INSERT,SELECT,UPDATE)。或者你的意思是「刪除行」? – 2012-04-15 08:34:36

+0

表格設計非常糟糕,整個腳本的重寫將在6個月左右。通常情況下,您可以在比賽結束後刪除比賽,並刪除包含這些比分的表格。但我想保留這些數據,以便人們仍然可以參考它,從而嘗試將其歸檔。會不會有很多表格減慢數據庫速度?否則,我會把它保持原樣。 – Johan 2012-04-15 09:06:07

回答

0

您應該創建第三個表,從現有表中刪除roundX列並使用它們的ID引用它們。

rounds: team_id, tournament_id, no, pos, score 
+0

這確實是更好的解決方案,但是看到腳本有點不好,並且在6個月內重寫正在進行中,我正在尋找臨時解決方案。 – Johan 2012-04-15 09:43:34

0

你應該正常化你的表,但在此期間.... 我假設的主要問題是處理可變數量的代碼roundxpos和roundxscore列。

希望這有助於:

  • 獲取此查詢的結果:SHOW COLUMNS FROM表1 WHERE場LIKE '輪%陽性'
  • 獲取此查詢的結果:SHOW COLUMNS FROM表1 WHERE場LIKE '圓%的分數'
  • 通過字段名循環創建表2插入

    //example, assuming results are fetched into an associative array 
    $query = "INSERT INTO table2 (tournamentid, teamid, name)"; 
    foreach($roundpos_fields as $f){ $query .= "," . $f['Field']; } 
    foreach($roundscore_fields as $f){ $query .= "," . $f['Field']; } 
    $query .= "(SELECT $tournamentid, '' teamid, name"; 
    foreach($roundpos_fields as $f){ $query .= "," . $f['Field']; } 
    foreach($roundscore_fields as $f){ $query .= "," . $f['Field']; }   
    $query .= ")"; 
    
相關問題