2009-07-02 10 views
1

Ich habe eine CSV-Datei, die wöchentlich generiert und in eine MySQL-Datenbank geladen wird. Ich muss einen Bericht erstellen, der verschiedene Statistiken zu den importierten Datensätzen enthält. Die erste derartige Statistik zeigt, wie viele Datensätze importiert wurden.erzeuge mysql-Statistik

Ich benutze PHP, um mit der Datenbank zu verbinden, und werde PHP benutzen, um eine Seite zu erzeugen, die solche Statistiken zeigt.

Die CSV-Dateien werden jedoch über ein mysql-Skript importiert, ziemlich unabhängig von PHP.

Ist es möglich, die Datensätze zu berechnen, die importiert wurden, und die Nummer in einem anderen Feld/einer anderen Tabelle zu speichern?

Das Hinzufügen eines zusätzlichen Zeitfeldes zum Ausarbeiten von Feldern, die seit einer bestimmten Zeit hinzugefügt wurden, ist nicht möglich, da die Struktur der Datenbank nicht geändert werden kann.

Gibt es eine Abfrage, die ich beim Importieren aus einem MySQL-Skript verwenden kann, oder eine bessere Möglichkeit, die Anzahl der importierten Datensätze aus PHP zu generieren/zählen?

+0

könnten Sie auf die Klärung MySQL-Skript Teil davon? In welcher Sprache wird das Skript im Cron Jab aufgerufen? (Shell-Skript, Perl, Python, etc ...) – Jason

+0

es ist nur eine Textdatei mit SQL-Befehle, die in MySQL gefüttert wird ... mysql -uuser -ppass

Antwort

1

Mit der folgenden Abfrage können Sie die Anzahl der Datensätze in einer Tabelle ermitteln.

SELECT COUNT(*) FROM tablename 

Also, was Sie tun können, ist, dass Sie die Anzahl der Datensätze vor dem Import zählen können und nach dem Import und dann die Differenz wählen wie so.

$before_count = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS c FROM tablename")); 
// Run mysql script 
$after_count = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS c FROM tablename")); 
$records_imported = $after_count['c'] - $before_count['c']; 

Sie das alles aus dem MySql Skript tun können, wenn Sie möchten, aber ich denke, PHP ein bisschen mehr sauber zu sein, es stellt sich heraus, zu tun.

+0

Ich kann das mysql und PHP-Skript nicht integrieren , da das mysql-Skript von einem Cron-Job und das php-Skript in einer Web-Anwendung stammt. Wie könnte ich es nur im SQL-Skript tun? –

+0

Ein paar Optionen. Sie könnten das Cron-Skript bearbeiten. Machen Sie es zu einem Bash-Skript und rufen Sie das PHP vor und nach dem Ausführen des MySQL-Skripts auf. Oder Sie könnten die anfängliche Zählung durchführen und dann Folgendes tun: SELECT (SELECT QUERY FÜR FINAL VALUE) - (SELECT QUERY FOR INITIAL VALUE) – codeincarnate

+0

Ich kann das PHP-Skript nicht aufrufen, wie Sie sagen ... können Sie erweitern auf Ihrem SQL-Beispiel? –

0

Ein bisschen wie ein Fass-Scraper, aber abhängig von den Berechtigungen könnten Sie das Cron-Skript bearbeiten, um einige Voraktualisierungsstatistiken in eine Datei mit INTO OUTFILE auszugeben und dann die resultierende Datei in PHP zu analysieren. Sie würden dann die "vorher" Statistiken haben und könnten die Statistikabfragen gegen über PHP ausführen, um die "nachher" Statistiken zu erhalten.

Wie bei vielen dieser Lösungen ist es jedoch nahezu unmöglich, Aktualisierungen für vorhandene Zeilen mit dieser Lösung zu finden. (Obwohl neue Zeilen sollten trivial sein zu erkennen.)

+0

hmmm, das könnte funktionieren. Das Cron-Skript ist täglich und der PHP-Bericht wird wöchentlich sein ... also müsste ich anhängen ... können Sie mehr von einem Beispiel geben? –

0

Nicht wirklich sicher, was Sie nach, aber hier ist ein bisschen mehr Detail:

  1. man MySQL bekommen die relevanten Statistiken zu einem bekannten Verzeichnis zu exportieren, mit
    SELECT ... INTO OUTFILE .. Dieses Verzeichnis müsste lesbar/beschreibbar durch die MySQL
    Benutzer/Gruppe und Ihren Web-Server des Benutzers/Gruppe (oder was auch immer Benutzer/Gruppe
    Sie laufen PHPAs wenn Sie sein werde den cli über cron auf einem
    automatisierenwöchentlich. Die Datei sollte im CSV-Format vorliegen und als
    "stats_export_YYYYMMDD.csv" mit Datumsstempel versehen sein.

  2. Get PHP das Exportverzeichnis für Dateien scannen
    "stats_export_" ab, vielleicht die "scandir" Funktion mit einem einfachen
    substr-Test. Sie können dann den passenden Dateinamen zu einem Array hinzufügen. Sobald
    Sie keine Dateien mehr haben, sortieren Sie das Array, um sicherzustellen, dass es in der richtigen Reihenfolge ist.

  3. Lesen Sie die Statistikdaten aus jeder der Dateien im Array in
    Turn mit fgetcsv. Es wäre ratsam, diese Daten in ein sauberes
    Array zu legen, das auch den relevanten Datumsstempel enthält, der aus dem
    Dateinamen extrahiert wurde.

  4. An diesem Punkt haben Sie eine Zusammenfassung der Statistiken am Ende jedes
    Tages in einem Array. Sie können dann die entsprechenden Statistik-SQL-Abfragen
    erneut (falls erforderlich) direkt aus PHP ausführen und die Statistikdaten zu den Daten
    Array hinzufügen.

  5. Vergleich/Kontrast und Ausgabe wie erforderlich.

0

Legen Sie die Dateien mit PHP und 'LOAD DATA INFILE .... INTO TABLE ..' und dann bekommen die Anzahl der importierten Zeilen mit mysqli_affected_rows() (oder mysql_affected_rows)