phpbar.de logo

Mailinglisten-Archive

viel Arbeit, nur wie schafft man das

viel Arbeit, nur wie schafft man das

Michael Donning mysql-de_(at)_lists.bttr.org
Tue, 12 Feb 2002 16:23:03 +0100


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