2012-04-15 51 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 .= ")"; 
    
相关问题