2012-04-15 11 views
0

Da ich weit entfernt von einem Experten in PHP bin, hat mich das verblüfft und ich kann kein Skript dafür machen.Kopiere eine Tabelle in eine andere mit unterschiedlicher Anzahl von Spalten

Lets sehen, wenn ich dies so klar wie möglich erklären kann.

Können sagen, ich habe Tabelle1 und Tabelle2

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

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

Wenn aus Tabelle1 Tabelle 2 kopiert i 2 Felder vor ihm hinzufügen möchten. (id und turnierid)

Das Problem, das ich gegenüberstelle, ist, dass Table1 jedes Mal eine andere Menge von roundxpos/roundxscore hat.

Grundsätzlich, was ich tun möchte ist, sobald ein Turnier vorbei ist, möchte ich die Tabelle löschen. Kopieren Sie die Daten in eine andere Tabelle, um die Ergebnisse zu archivieren. aber jedes Turnier kann eine andere Rundengröße haben.

Ich hoffe, jemand kann verstehen, was ich versuche, + _ + zu erreichen.

+1

Das klingt nach einem wirklich schlechten Tischdesign. Kannst du es aendern? –

+0

Sie können versuchen, Ihre Datenbank zu normalisieren, so dass Sie kein roundX verwenden müssen, sondern eine andere zugeordnete Tabelle (mit TurnierID als Fremdschlüssel) verwenden. Außerdem habe ich noch nie die Notwendigkeit gesehen, eine Tabelle zu "löschen" selbst als Archiv dienen), insbesondere weil der Datenbankbenutzer möglicherweise nicht die Berechtigung hat, diesen Befehl auszuführen (nur INSERT, SELECT, UPDATE). Oder meinst du "Zeilen löschen"? –

+0

Das Tabellen-Design ist ziemlich schlecht und eine vollständige Neufassung des Skripts wird in etwa 6 Monaten kommen. Normalerweise könnten Sie ein Turnier löschen, sobald es beendet wurde, und das würde die Tabelle löschen, die diese Punkte enthält. Aber ich möchte die Daten behalten, damit die Leute immer noch darauf zurückkommen und versuchen, sie zu archivieren. Würden nicht viele Tabellen die Datenbank verlangsamen? sonst würde ich es einfach so lassen wie es ist. – Johan

Antwort

0

Sie sollten eine dritte Tabelle erstellen, die roundX-Spalten aus Ihren vorhandenen Tabellen entfernen und sie mit ihren IDs referenzieren.

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

das wäre in der Tat die bessere Lösung, aber da das Skript irgendwie frustriert ist und in 6 Monaten ein Neuschreiben kommt, war ich auf der Suche nach einer temporären Lösung. – Johan

0

Sie sollten Ihre Tabellen normalisieren, aber in der Zwischenzeit .... Ich gehe davon aus das Hauptproblem die variable Anzahl von roundxpos und roundxscore Spalten im Code verarbeitet.

this helps:

  • die Ergebnisse dieser Abfrage Get: SHOW COLUMNS FROM Tabelle1 WHERE Feld LIKE 'runder% po'
  • die Ergebnisse dieser Abfrage Get: SHOW COLUMNS FROM Tabelle1 WHERE Feld LIKE 'round% score'
  • erstellen Sie die table2 Einsätze durch Schleifen Feldnamen

    //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 .= ")"; 
    
Verwandte Themen