2017-07-07 9 views
-2

私は3つのチェックボックスのリストから少なくとも1つのオプションを選択し、次に選択したオプション(チェックボックス)のクエリを書く必要があるフィルタ検索のコードを書いています。もし私のコードを実行しようとすると、私は "クエリの結果のカウントがゼロに等しい$ count = 0"を取得しています。以前は初めてコードを書いたときにうまくいきましたが、現在は機能していません。なぜ私の複合 'mysql'クエリは常にクエリ結果 'count'を0として返しますか?

私の形式は次のとおりです。&データがある

私のMySQLのテーブル構造:lead_audit

構造:

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 

私のクエリは以下の通りです:

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'); 
    } 

結果クエリは次のとおりです。

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 

なぜ私は$カウント値が常に '0'になっていますか?私のコードで何が間違っていますか?

+0

出力されたクエリを追加します。入力した内容がわからない場合は、一連のifステートメントを読むことは実際にはうまくいきません。また、実際にそのクエリだけに減らします。そして最後に:クエリを取得したらデータサンプルを追加してください –

+0

クエリ自体はうまく見えます。比較のために2つの日付を定義する方法に問題があるかもしれません。この記事を見てください:https://stackoverflow.com/questions/10398921/how-does-sql-server-decide-format-for-暗黙的な日時変換 – cars10m

+0

あなたの返事をありがとう。私はテーブル構造も追加しました。一般的にmysql YYYY-MM-DDに日付形式を格納します。同じ日付形式もチェックしています。面白いのは、ローカルサーバではうまく動作していますが、サーバでは動作していません。 –

答えて

0

回答を投稿するには遅すぎますが、これが誰かを助けてくれることを願っています。

問題:私が作った間違いは、以下のような開始日と終了日付の形式を与えることにある

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

しかし、実際に私は以下のように入力を与えることがあります。

ソリューション:

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

私の問題は、開始日と終了日を「00:00:00」として追加した後に解決されます。みんな、ありがとう。

関連する問題