Umständlich?
Pacman
- php
Hallo! Hätte da mal eine Frage.
Ich habe in einer Datenbank 3 Tabellen. Eine ist sozusagen die "Haupttabelle" und die beiden anderen sind eigentlich deshalb da weil die Daten aus einer veralteten Datenbank nicht anders zu exportieren sind. Nun soll die "Haupttabelle" jeweils mit den Informationen der beiden anderen einmalig abgleichen. Dieser Vorgang dauert sehr lange (ca. 5min.). Kann es sein, daß das ganze von mir aufgrund meiner Unwissenheit blöd gemacht ist und man das um einiges beschleunigen könnte?
Code:
-----------------------------------------------------------
<?
$server = "localhost";
$user = "xxxxxxxxx";
$pass = "xxxxxxxxx";
$dbase = "xxxxxxxxx";
$conn = @mysql_connect($server, $user, $pass);
if($conn) {
mysql_select_db($dbase, $conn);
} else {
die("Fehler, Verbindung konnte nicht hergestellt werden!");
}
$sql = " SELECT F1, F2, F5, F6, F9, F11, F21, F12 FROM Tabelle1";
$res = mysql_query($sql);
$anz = mysql_num_rows($res);
$sql2 = $sql." ORDER BY F1 ASC";
$res2 = mysql_query($sql2);
$anz2 = mysql_num_rows($res2);
while ($row = mysql_fetch_array($res2, MYSQL_ASSOC)) {
$ht = mysql_fetch_array(mysql_query('SELECT F1, F2 FROM ht WHERE F1 = '.$row[F5].''));
$ut = mysql_fetch_array(mysql_query('SELECT F1, F2 FROM ut WHERE F1 = '.$row[F6].''));
echo $ht[F2]." ".$row[F2]." ".$ut[F2]."<br>";
mysql_query('UPDATE Tabelle1 SET F28 = "'.$ht[F2].'" WHERE CONCAT( F1 ) = '.$row[F1].'');
mysql_query('UPDATE Tabelle1 SET F29 = "'.$ut[F2].'" WHERE CONCAT( F1 ) = '.$row[F1].'');
}
?>
-----------------------------------------------------------
Ich wäre Euch wirklich mehr als dankbar falls Ihr mir helfen könntet.
Hallo Pacman!
Ich habe in einer Datenbank 3 Tabellen.
Das klingt nach SQL-Aufgabenstellung
Eine ist sozusagen die "Haupttabelle" und die beiden anderen sind eigentlich deshalb da weil die Daten aus einer veralteten Datenbank nicht anders zu exportieren sind. Nun soll die "Haupttabelle" jeweils mit den Informationen der beiden anderen einmalig abgleichen. Dieser Vorgang dauert sehr lange (ca. 5min.). Kann es sein, daß das ganze von mir aufgrund meiner Unwissenheit blöd gemacht ist und man das um einiges beschleunigen könnte?
Ich kenne PHP nicht aber ich denke, das sollte mit SQL auch dort gelöst werden können.
Also etwas in der Art von
"Update Tabelle1 set F28 = ht.F2 where ht.F1 = tabelle1.F5;"
und dann noch
"Update Tabelle1 set F29 = ut.F2 where ut.F1 = tabelle1.F6;"
Viele Grüße
H-P Ortner
Danke für Deine Antwort, H-P Ortner.
Leider bin ich dadurch nicht wirklich schlauer.
Sollte ich evtl. den Beitrag nochmal unter der Rubrik "Datenbank" erstellen? Mit PHP hat es ja nur entfernt etwas zu tun. Aber vielleicht ist ja noch jemand so nett und schaut einmal schnell über meinen Quelltext und sagt "Ah! Das ist ja total umständlich gelöst! Du machst ja jedes Mal einen Datenbank-Connect auf und wieder zu anstatt..."
Hallo Pacman!
Leider bin ich dadurch nicht wirklich schlauer.
Schade ich hatte gehofft, das würde als erste Anstoß schon helfen.
Sollte ich evtl. den Beitrag nochmal unter der Rubrik "Datenbank" erstellen? Mit PHP hat es ja nur entfernt etwas zu tun. Aber vielleicht ist ja noch jemand so nett und schaut einmal schnell über meinen Quelltext und sagt "Ah! Das ist ja total umständlich gelöst! Du machst ja jedes Mal einen Datenbank-Connect auf und wieder zu anstatt..."
Ja genau das wollte ich ja erklären.
Du machst für jede Zeile der Tabelle1 einen neue Abfrage und holst dir jeweils einen Datensatz aus einer der beiden anderen Tabellen.
SQL kann aber die Daten einer Spalte in einer Tabelle aktualsieren. Im einfachsten Fall könnte am einen konstanten Wert in in alle Felder einer Spalte eintragen.
Update Tabelle1 set F28 = 42;
(wenn in F28 Zahlen gespeichert werden)
Das willst du natürlich nicht.
SQL kann aber auch den Wert aus der Tabelle ht holen, wo der Wert der Spalte F1 in der Tabelle ht gleich dem Wert ist, der in Tabelle1 in F5 steht.
Select Tabelle1.F1, tabelle1.F5, ht.F1, ht.f2 from
Tabelle1, ht
where Tabelle1.F5 = ht.f1
Dann hast du alle Werte nebeneinander. Das könntest du ja schon einmal ausgeben.
Das willst du aber immer noch nicht, denn eigentlich willst du ja, dass die Datenbank das gleich selbst aktualisiert.
Genau das sollte mein SQL-Statement tun.
Da ich PHP ni,cht kenne, konnte ich dir keinen Tipp geben, wie du statt einer Abfrage die so etwas wie eine Tabelle zurückliefert, dort eine Aktualisierungsabfrage eingibst, die ja keine Datensätze zurückliefert.
Ein Beispiel, mit eine Löschabfrage findest du aber zB hier:
http://www.comptechdoc.org/independent/web/php/intro/phpmsupdate.html
Genau so sollten auch die beiden Aktualisierungsabfragen übergeben werden können, die ich gestern beschrieben habe.
Ich hoffe das hilft jetzt eher.
Viele Grüße
H-P