2012-04-15 8 views
0

私はPHPの専門家からは遠いので、これは私を驚かせてしまいました。私はスクリプトを作成できないようです。異なる列数のテーブルを別のテーブルにコピー

可能な限り明確に説明できるかどうかを確認してください。

は私が持っているとしましょうTABLE1とtable2のテーブル私はそれの前に2つのフィールドを追加したい2にTABLE1からコピー

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

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

。 (idとtournamentid)

私が直面している問題は、Table1には毎回異なった量のroundxpos/roundxscoreがあることです。

基本的には、いったんトーナメントが終了したら、テーブルを削除したいと思っています。その中のデータを別のテーブルにコピーして結果をアーカイブします。各トーナメントは異なるサイズのラウンドを持つことができます。

+ + +達成しようとしていることを誰かが理解できることを願っています。

+1

それは本当に悪いテーブルデザインのように思えます。あなたはそれを変更できますか? –

+0

データベースを正規化して、ラウンドXのものを使用する必要はなく、別の関連テーブル(外部キーとしてtournamentIDを使用)を使用することもできます。また、テーブルを「削除」する必要はありませんとにかくアーカイブとして機能します)。特に、データベースユーザーがそのコマンドを実行する権限を持っていない可能性があります(INSERT、SELECT、UPDATEのみ)。または、「行を削除する」という意味ですか? –

+0

テーブルのデザインはかなり悪く、スクリプトの書き換えは6ヶ月程かかります。通常、終了したトーナメントを削除すると、それらのスコアを保持するテーブルが削除されます。しかし私は人々がまだそれを参照してそれをアーカイブしようとすることができるようにデータを保持したい。多くのテーブルがデータベースを遅くすることはありませんか?そうでなければ、私はちょうどそのようにそれを残すだろう。 – Johan

答えて

0

3つ目のテーブルを作成し、既存のテーブルからroundX列を削除し、それらのIDで参照する必要があります。

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

それは本当に良い解決策になるだろうが、スクリプトがちょっとしたテリーで、6ヶ月後に書き直していて、私は一時的な解決策を探していた。 – Johan

0

あなたは、あなたのテーブルを正規化するが、その間になければならない.... 私は、主な問題は、コード内roundxposとroundxscore列の可変数を処理していると仮定しています。

・ホープ、このことができます:フィールドLIKE表1でSHOW COLUMNS:フィールドLIKE「ラウンド%posの」

  • は、このクエリの結果を取得する表1でSHOW COLUMNS:

    • は、このクエリの結果を取得します。 'ラウンド%のスコア'
    • フィールド名をループによってtable2の挿入を作成

      //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 .= ")"; 
      
  • 関連する問題