Mailinglisten-Archive |
Hallo Norbert,
> -----Original Message-----
> in einer Tabelle existieren 25.000 Reccords.
> Nun habe ich eine Spalte hinzugefuegt und moechte darin das Ergebnis
> einer Berechnung speichern, der sich aus den anderen Spalten ergibt.
> Grund: eine Abfrage muesste sonst in mehreren Schritten erfolgen,
> da der zu errechnende Wert mit SQL-Mitteln nicht zu berechnen ist.
> Falls das doch jemand schaffen sollte, verzoegert es IMHO die
> Abfrage weit ueber Gebuehr.
>
> Nun die eigentliche Frage:
> Es sind 25.000 SELECTS mit daraus abgeleiteten 25.000 UPDATES.
> Wie und mit was schafft man ein derartiges Pensum abzuarbeiten ?
Ich hab hier mal ein einfaches Beispiel mit einem Select und mehreren
Updates, damit Du mal siehst, wie das in Perl laufen kann. (z.B. als
cron-job).
Das läßt sich ggf. auch adaptieren. Man kann das ganze notfalls natürlich
auch über http starten, dan muß nur die Bildschirm-Ausgabe html-konform
sein.
----------------------------------------------------------------------
#!/usr/bin/perl
#
# beispiel
#
use DBI;
$user='meinusername'
$pw='meinkennwort';
#tabellennamen generieren
$artikel = 'artikel';
$warengruppen = 'warengruppen';
$database= 'meinedatenbank';
#################### log_line ####################
# texte in eine trace-datei ausgeben
sub log_line {
my ($logline) = _(at)__;
open(LOG_FILE,'>>trace.log');
print LOG_FILE localtime(time())." $logline\n";
close(LOG_FILE);
}
#################### los gehts ####################
log_line("start:");
$dsn = "DBI:mysql:$database";
$dbh = DBI->connect ($dsn,$user,$pw);
if ( !defined $dbh ) {
log_line("Connect error: $database");
die print "Connect error!";
}
$sql="select w.wg_nr,count(*)
from $artikel a,$warengruppen w
where a.ART_GRP like concat(w.ART_GRP,'%')
group by w.wg_nr";
$sth=$dbh->prepare($sql);
if (!defined $sth) {
log_line("Cannot prepare $sql");
die print "Cannot prepare $sql";
}
$usql="update $warengruppen set wg_numart=? where wg_nr=?";
$usth=$dbh->prepare($usql);
if (!defined $usth) {
log_line("Cannot prepare $usql");
die print "Cannot prepare $usql";
}
$rc=$sth->execute();
#hier ggf. den rc prüfen
while ( _(at)_row = $sth->fetchrow() ) {
$rc=$usth->execute(($row[1],$row[0]));
#hier ggf. den rc prüfen
}
$sth->finish;
$usth->finish;
$dbh->disconnect;
log_line("stop:");
print "fettich...\n";
---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive