2017-07-07 1 views
-2

Ich schreibe Code für Filtersuche, wo Benutzer mindestens eine Option aus einer Liste von 3 Kontrollkästchen auswählt, dann muss ich eine Abfrage für die ausgewählten Optionen (Kontrollkästchen) schreiben. Wenn ich versuche, meinen Code auszuführen, dann bekomme ich "Abfrageergebnis zählen als gleich Null, was $ count = 0 bedeutet". Früher, als ich Code zum ersten Mal geschrieben habe, hat es funktioniert, aber jetzt funktioniert es nicht.Warum gibt meine komplexe 'mysql' -Abfrage immer das Abfrageergebnis 'count' als 0 zurück?

Meine Form ist:

Meine MySql Tabellenstruktur & Daten: lead_audit

Struktur:

ColumnName DataType Length 
    id   int  11 
supplier_id int  11 
source  varchar 255 
client_id int  11 
campaign_id varchar 255 
data   text 
received  datetime 
errors  blob 
disposition varchar 255 

id supplier_id source client_id campaign_id data received  errors disposition 
1 6   6   1  56   --- 2017-07-07 11:19:25 False Accepted 
1 6   6   1  56   --- 2017-07-07 11:19:25 False Accepted 

Meine Suche ist unter:

if(isset($request->suppliers) && $request->suppliers == 'suppliers'){ 
      $results->leftjoin('suppliers AS s', 's.id', '=', 'l.supplier_id') 
        ->addSelect('s.name AS Supplier') 
        ->groupBy('s.name') 
        ->orderBy('s.name'); 
} 
if(isset($request->source) && $request->source == 'source'){ 
      $results->addSelect('l.source AS Source') 
        ->groupBy('l.source') 
        ->orderBy('l.source'); 
      //$results->leftjoin('source AS so', 'so.id', '=', 'l.source_id') 
} 
if(isset($request->campaign) && $request->campaign == 'campaign'){ 
      $results->leftjoin('campaigns AS c', 'c.id', '=', 'l.campaign_id') 
        ->addSelect('c.name AS Campaign') 
        ->groupBy('c.name') 
        ->orderBy('c.name'); 
}  
if(isset($request->clients) && $request->clients == 'clients'){ 
      $results->leftjoin('clients AS cl', 'cl.id', '=', 'l.client_id') 
        ->addSelect('cl.name AS Client') 
        ->groupBy('cl.name') 
        ->orderBy('cl.name'); 
} 
$queryResults = $results->addSelect('l.disposition AS Disposition') 
       ->selectRaw('COUNT(*) as Count') 
       ->whereBetween('l.received', [$start, $end]) 
       ->groupBy('l.disposition') 
       ->orderBy('l.disposition') 
       ->get()->toArray(); 
$count = count($queryResults); 
echo "Count: ".$count;exit; 

if($count > 0){ 
    $results = array_map(function($item) { 
      return (array)$item; 
     }, $queryResults); 
    return Excel::create('my_excel_name', function($excel) use ($results) { 
      $excel->sheet('sheet_name', function($sheet) use ($results) { 
       $sheet->fromArray($results); 
      }); 
     })->setFilename($filename) 
     ->download('csv'); 
} else{ 
     \Session::flash('error','No data has been found.'); 
     return redirect('my_controller/create'); 
    } 

Die Ergebnisabfrage lautet:

array:1 [▼ 
0 => array:3 [▼ 
"query" => "select `s`.`name` as `Supplier`, `l`.`source` as `Source`, `c`.`name` as `Campaign`, `cl`.`name` as `Client`, `l`.`disposition` as `Disposition`, COUNT(*) as Count from `lead_audit` as `l` left join `suppliers` as `s` on `s`.`id` = `l`.`supplier_id` left join `campaigns` as `c` on `c`.`id` = `l`.`campaign_id` left join `clients` as `cl` on `cl`.`id` = `l`.`client_id` where `l`.`received` between ? and ? group by `s`.`name`, `l`.`source`, `c`.`name`, `cl`.`name`, `l`.`disposition` order by `s`.`name` asc, `l`.`source` asc, `c`.`name` asc, `cl`.`name` asc, `l`.`disposition` asc ◀" 
"bindings" => array:2 [▼ 
    0 => "2017-07-01" 
    1 => "2017-07-08" 
] 
"time" => 149.01 
] 
] 

If I print below: 
print_r($queryResults); 
echo "Count: ".$count;exit; 

then o/p 
    Array () Count: 0 

Warum bekomme ich $ count value immer '0'. Was ist falsch in meinem Code?

+0

Fügen Sie die ausgegebene Abfrage hinzu: Lesen zu einer Menge von if-Anweisungen funktioniert nicht wirklich, wenn Sie nicht wissen, was Sie eingeben. Außerdem: Reduziere auf genau diese Abfrage. Und zuletzt: Fügen Sie ein Datenbeispiel hinzu, sobald Sie die Abfrage haben –

+0

Die Abfrage selbst sieht gut aus. Möglicherweise haben Sie ein Problem mit der Art und Weise, wie Sie die beiden Daten für den Vergleich definieren. Sehen Sie sich diesen Beitrag an: https://stackoverflow.com/questions/10398921/how-does-sql-server-decide-for-for-for-for-- implicate-datetime-conversion – cars10m

+0

Danke für Ihre Antwort. Ich habe auch die Tabellenstruktur hinzugefügt. in der Regel mysql Speichert das Datumsformat in YYYY-MM-DD, ich suche auch nach dem gleichen Datumsformat. Lustig ist hier, dass es auf dem lokalen Server funktioniert, aber auf unserem Server nicht funktioniert. –

Antwort

0

Es ist zu spät, um eine Antwort zu posten, aber ich hoffe, dass dies jemandem helfen kann. Der Fehler, die ich gemacht ist Formate Startdatum und Enddatum wie unten geben:

Problem:

$start = "2017-07-01" 
$end = "2017-07-08" 

aber eigentlich muss ich den Eingang geben wie unten:

Lösung:

$start = "2017-07-01 00:00:00" 
$end = "2017-07-08 00:00:00" 

Mein Problem ist nach dem Hinzufügen von Zeit als "00:00:00" zu Beginn und Ende von Daten gelöst. Danke an alle.

Verwandte Themen