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?
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 –
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
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. –