2016-05-09 13 views
1

Ich habe zwei Tabellen wie 'Mitarbeiter' und 'Employee Leaves'. Ich möchte nur berechnen, wie viele Tage der Mitarbeiter den Urlaub für das Jahr genommen hat. 'employee-leaves' hat die Urlaubsdaten der letzten drei Jahre. Ich benutze adodb.inc.php Lib-Dateien für die Datenbankverbindung. Ich habe 50 Angestellte Aufzeichnungen und 1000 Aufzeichnungen von Urlaub genommen. Meine Anwendung benötigt ungefähr 1 Minute, um die Daten zu erhalten und anzuzeigen. Wenn ich das in Google Chrome sehe-> Entwickler-Tools-> NEtwork, zum Warten (TTFB) - 38.46s.Mehr Wartezeit beim Abrufen von Daten aus der Datenbanktabelle mit großen Daten in PHP

Ich möchte diese Zeit reduzieren. Denn sobald die Tabelle 'employeeleaves' mehr Daten erhält, erhöht sich diese Wartezeit. Unten füge ich meine Daten ein, die Codierung kodieren, zuerst nehme ich Angestellte Liste und für jeden Angestellten, der die Blätter für das bestimmte Jahr berechnet.

$employee = new Employee(); 
     $employees = $employee->Find("1=1");   
     foreach($employees as $employee){ 

$employeeLeave = new EmployeeLeave(); 
     $employeeLeaves = $employeeLeave->Find("employee = ? and leave_period = ? and leave_type = ? and status = ?", 
     array($employeeId,'2016','SickLeave','approved')); 
     if(!$employeeLeaves){ 
      error_log($employeeLeave->ErrorMsg(),true); 
     }  
     return $employeeLeaves; 
} 

Above-Code ist für die Aufnahme ‚Entgeltfortzahlung im Krankheitsfall‘, werde ich das gleiche für ‚lässig Urlaub‘ nutzen auch.

Ich möchte nur wissen, ob ich diese Abfrage erstellen kann, um nur die Zeilen zu scannen, die den Abwesenheitszeitraum als '2016' enthalten.

employeeleaves Table- Feldnamen

+-------------------------------------------------------------------------------------------+ 
| id, employee, leave_type, leave_period, date_start, date_end, details, status, attachment | 
+-------------------------------------------------------------------------------------------+ 
+0

Ich bin nicht ganz sicher, dass es Ihre Anwendungen Fehler ist, die Abfrage als langsam auszuführen. hast du slowlog in deinem mysql aktiviert? Auf welcher Maschine läuft es? – Michael

+0

außerdem können Sie die Abfrage manuell direkt auf der Datenbank ausführen, um zu sehen, ob es die Abfrage selbst ist, die so langsam ist? – Michael

+0

Können Sie uns die EmployeeLeave-Klasse zeigen, speziell die Find-Methode – Matt

Antwort

0

Wie geht es Ihnen?

Sie haben 2 Tabellen, warum erstellen Sie keine Abfrage in MYSQL beizutreten?

Es wäre viel besser!

SELECT * FROM employee e 
INNER JOIN employeeLeave el 
ON(el.employee = e.id) 
+0

Ich benutze Adodb Active Record-Methode. Ich weiß nicht, wie man mitmacht. – Anu

+0

siehe dies: http://stackoverflow.com/questions/4695372/php-active-record-table-joins –

Verwandte Themen