Bir masaüstü adres defterine ithalat için PHP ile MySQL veritabanı 20 000 kişileri vermek nasıl?

5 Cevap php

Ben postalama için printing on stickers için export contact data için bir komut dosyası yazmak gerekiyor. Veritabanı tablosundaki 20 000 kayıtlarına kadar var olabilir.

The main problem is that the number of records could be so high and the site is hosted on a shared server and exporting the whole 20k records would, presumably, kill the script or stall. I the numbers were not so high i would simply export all data into a hCard file.

Çözüm PHP olması gerekir, ve çıkan dosya adres etiketleri yazdırmak için kullanılmak üzere MS Office tarafından kullanılabilir olmalıdır.

All ideas are welcome!

5 Cevap

Ben MySQL sunucuya erişimi DO küstah değilim. MySQL bağlanamıyorum Neden doğrudan o zaman bir LOT kaydetmeniz gerekir. Operasyon uzun sürer veya performans sorunları o gece yarısı o planı bekliyoruz.

Sen, bu gibi csv doğrudan verebilirsiniz

SELECT * INTO OUTFILE 'result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM my_table;

Mailmerge yoluyla ve gitmek Word bunu yükleyin!

20k kayıtları bir CSV dosyasına vermek çok hızlı olmalıdır. Paylaşılan barındırma yüzden birkaç saniye altında 20k kayıtları işleyemiyor kaynak hasret ise, o zaman daha büyük sorunlar var.

Gruplar halinde çalışmak ...

  1. $ I.csv 50. Adresleri yükleyin.
  2. Sitenizi (İpucu: header ()) yükleyin, etrafında 400 kez tekrarlayın.
  3. (hatta notepad kullanarak) büyük bir birine 400 cvs dosyaları kopyalamak.
  4. Açık örneğin Excel ile.

Bu ana bağlıdır, ancak genellikle set_time_limit ile artık komut dosyası yürütme süreleri için izin verebilirsiniz. Csv dosyasına veri damping ile birleştiğinde bu bir yoludur. Longneck belirttiği gibi, 20k kayıtları genellikle çalıştırmak için komut için ayrılan 30 saniyeden daha hızlı olmalıdır.

Kod örnek: (Ben zaten bunu yapmak zorunda)

$static_amount = 100; // 100 Entries to the same time
for($i = 0; $i < $mysql->count(); $i+$static_amount)
{
$toFile[$i] = $mysql->query('SELECT * FROM table WHERE id < $i AND id > $static_amount');
sleep(10); // very important!!!
}

VEYA

if($_COOKIE['amount'])
{
$_COOKIE['amount'] = 100;
}

$toFile = $mysql->query('SELECT * FROM table WHERE id > $_COOKIE['alreadyPerformed'] LIMIT $_COOKIE['amount']';
setCookie('amount') = 100;
setCookie('alreadyPerformed') = $_COOKIE['alreadyPerformed'] + 100;