üreten mysql istatistikleri

4 Cevap php

Ben haftalık oluşturulan ve bir mysql veritabanına yüklenen bir csv dosyası var. Ben ithal kayıtları üzerinde çeşitli istatistikleri içeren bir rapor yapmak gerekir. Tür ilk istatistik birçok kayıt ithal edilmiştir nasıl.

Ben veritabanı arayüzü için PHP kullanmak ve böyle istatistikleri gösteren bir sayfa oluşturmak için php kullanarak olacaktır.

Ancak, CSV dosyaları oldukça herhangi bir PHP ayrı bir mysql komut dosyası aracılığıyla ithal edilmektedir.

Ithal edildi kayıtları hesaplamak ve farklı bir alan / tablo numarası veya başka bir şekilde saklamak mümkün mü?

Veritabanı yapısı değiştirilemez gibi belirli bir süre sonra eklenen alanları çalışmak için ek bir SaatAlanı ekleme, mümkün değildir.

Bir mysql komut ithal ederken kullanabileceğiniz bir sorgu veya php içinde ithal kayıtların sayısını saymak / üretmek için daha iyi bir yolu var mı?

4 Cevap

Aşağıdaki sorguyu kullanarak bir tablodaki kayıtların sayısını alabilirsiniz.

SELECT COUNT(*) FROM tablename

Peki ne yapabilirsiniz ki ithalat öncesi ve ithalat sonrası kayıtların sayısını saymak ve o zaman gibi fark seçebilirsiniz olduğunu.

$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'];

Eğer istiyorum ama biraz daha temiz olduğu ortaya çıkıyor yapmak için PHP kullanarak düşünüyorsanız tüm MySQL komut bu yapabilirdi.

Bir varil-kazıyıcı, ama izinlere bağlı olarak size cron düzenleme olabilir Biraz SELECT INTO Dosyası kullanarak bir dosya içine çıkış için bazı ön-güncelleme istatistikleri MySQL komut yürütülür ve daha sonra PHP çıkan dosya ayrıştırmak. Daha sonra istatistikler 'önce' olurdu ve 'sonra istatistikleri elde etmek için PHP ile karşı istatistikler sorguları yürütebilir.

Ancak, bu çözümlerin çoğu gibi bu çözümü kullanarak, varolan bir satır güncelleştirmelerini bulmak imkansız yanında olacak. (Her ne kadar yeni satırlar algılamak için önemsiz olmalıdır.)

Sonra ne konum gerçekten emin, ama burada biraz daha ayrıntı değil:

  1. Get MySQL to export the relevant stats to a known directory using
    SELECT... INTO OUTFILE.. This directory would need to be readable/writable by the MySQL
    user/group and your web server's user/group (or whatever user/group
    you're running PHPas if you're going to automate the cli via cron on a
    weekly basis. The file should be in CSV format and datestamped as
    "stats_export_YYYYMMDD.csv".

  2. Get PHP to scan the export directory for files beginning
    "stats_export_", perhaps using the "scandir" function with a simple
    substr test. You can then add the matching filename to an array. Once
    you're run out of files, sort the array to ensure it's in date order.

  3. Read the stats data from each of the files listed in the array in
    turn using fgetcsv. It would be wise to place this data into a clean
    array which also contains the relevant datestamp as extracted from the
    filename.

  4. At this point you'll have a summary of the stats at the end of each
    day in an array. You can then execute the relevant stats SQL queries
    again (if so required) directly from PHP and add the stats to the data
    array.

  5. Gerektiği gibi / kontrast ve çıkış karşılaştırın.

) '.. INTO TABLE .... LOAD DATA INFILE' PHP ve kullanarak dosyaları yüklemek ve ardından mysqli_affected_rows (kullanarak içe satır sayısını almak (veya mysql_affected_rows)