Destul de des este nevoie să introduceți informații din fișiere în baza de date. Una dintre modalitățile de a rezolva această problemă este să deschideți un fișier, să citiți linia fișierului după linie, să împărțiți linia de separator și să o adăugați la baza de date. În acest caz, este posibil să existe o problemă cu viteza de import, dacă fișierul este prea mare.
Pentru a rezolva această problemă, puteți folosi instrucțiunea MySQL LOAD DATA INFILE. LOAD DATA INFILE vă permite să descărcați informații din fișiere cu mare viteză, ceea ce este ceea ce avem nevoie.
Dar această metodă mi-am observat plusurile și minusurile:
- - nu este posibilă urmărirea corectitudinii datelor de intrare
- + viteza de download este impresionantă
Imaginați-vă situația pe care trebuie să o descărcați la listele de prețuri ale organizațiilor. Pentru a face acest lucru, va trebui să creați un formular cu posibilitatea de a selecta un fișier și un buton pentru a adăuga fișierul în baza de date.
Mai întâi, creați un tabel tbl_price, unde stocăm informații despre lista de prețuri.
id_user va fi o cheie străină pentru comunicarea între organizație și lista de prețuri.
Creați un fișier pe care îl vom importa
Crearea unui model
Creați un model pentru tabelul tbl_price de către generatorul de coduri gii. Adăugăm metoda de import a fișierului în clasa modelului Preț.
Să aruncăm o privire mai atentă la comanda LOAD DATA LOCAL INFILE.
LOCAL spune că fișierul va fi luat din directorul serverului client, dacă scrieți doar LOAD DATA INFILE, fișierul va fi luat din directorul serverului SQL.
DOMENII FINALIZATE de indică modul în care câmpurile sunt separate unul de celălalt, în cazul nostru este un punct; ";" punct și virgulă.
Liniile terminate de către indică modul în care liniile vor fi separate, avem un caracter de linie nouă.
IGNORE 1 LINII numărul de linii ignorate din partea de sus, săriți unul pentru că avem un antet, dacă nu utilizați anteturile coloanelor, nu puteți scrie acest parametru.
Mai departe, în paranteze, specificăm acei parametri care vor fi adunați în bază dintr-un fișier, este IMPORTANT să specificăm secvența coloanelor unei DB care se specifică într-un fișier, adică dacă în coloanele de bază sunt "preț", "contor", "unități" și în fișierul de import "unități", "preț", "conta", apoi în interogarea SQL, , "Preț", "Număr".
De asemenea, atunci când copiați un fișier într-o bază de date, poate apărea o situație în care fișierul de import nu conține toate informațiile necesare. În cazul nostru, acesta este id-ul organizației căreia îi aparțin prețul și timpul pentru formarea prețurilor. Pentru a face acest lucru, folosiți SET unde atribuim date_price datei actuale și ID-ului id_user al organizației.
Deoarece corectitudinea datelor de intrare din această metodă nu poate fi verificată (dacă este posibil, împărtășiți modul), atunci modificați regulile din modelul nostru.
Aici am creat scriptul import_csv, unde este monitorizată extensia fișierului selectat de utilizator. Extensie am ales CSV, dar poate fi diferit.
Crearea unei vizualizări
Creați clasa din afișarea Preț și adăugați codul următor.
Ei bine, aici totul este simplu, singura dată pentru a acorda atenție acestui lucru este
altfel, câmpul activeFileField va returna o valoare goală.
Crearea unui controler
Să creăm controlerul PriceController și în acesta actionImport cu următorul cod.