關于sql時間方面的處理
查詢大于時間兩小時(例:訂單設置兩小時后過期
$res = Order::where(['status'=>0,'sid'=>1])->whereRaw("created_at < NOW() - INTERVAL 2 HOUR")->get();
時間字段< NOW() - INTERVAL 2 HOUR
解讀:當前時間減去2小時(HOUR)如果還大于下單時間則超過

查詢當天、昨天等數據 用于統計
public function senior(Request $request) { $Sid = $request->session()->get('SUserId'); if ($request->ajax()){ //查詢今天訂單數據 $dateD = date('Y-m-d'); //我也看不懂。。。有時間研究 $data = DB::select( "SELECT IF(count IS NULL, 0, count) as num FROM (SELECT count(*) AS count,DATE_FORMAT(created_at, '%H') AS hour FROM lkx_orders where date_format(created_at,'%Y-%m-%d') = '$dateD' GROUP BY hour ORDER BY 1) A RIGHT JOIN (SELECT one.hours + two.hours AS dayHour FROM (SELECT 0 hours UNION ALL SELECT 1 hours UNION ALL SELECT 2 hours UNION ALL SELECT 3 hours UNION ALL SELECT 4 hours UNION ALL SELECT 5 hours UNION ALL SELECT 6 hours UNION ALL SELECT 7 hours UNION ALL SELECT 8 hours UNION ALL SELECT 9 hours) one CROSS JOIN (SELECT 0 hours UNION ALL SELECT 10 hours UNION ALL SELECT 20 hours) two WHERE (one.hours + two.hours) < 24) B ON A.hour = CONVERT(B.dayHour, SIGNED) ORDER BY dayHour" ); $orderNum = array_column($data,'num'); $data7D = date('Y-m-d',strtotime("-6 day")); $data = DB::select(" SELECT t1.date_str , COALESCE(t2.date_total_countss,0) as date_total_count FROM( SELECT @cdate:= date_add(@cdate,interval - 1 day) as date_str FROM (SELECT @cdate:=date_add(CURDATE(),interval + 1 day) from lkx_orders) tmp1 WHERE date_format(@cdate,'%Y-%m-%d') >'$data7D' ) t1 LEFT JOIN( SELECT date_format(m.created_at, '%Y-%m-%d') as date_str , sum(price) as date_total_countss FROM lkx_orders as m WHERE date_format(m.created_at,'%Y-%m-%d') >'$data7D' and m.status=1 and sid=$Sid GROUP BY date_str ) t2 on t1.date_str = t2.date_str order by t1.date_str asc "); $price7D['data'] = array_column($data,'date_total_count'); $price7D['title'] = array_column($data,'date_str'); $dataMyM = date("Y-m-d",mktime(0, 0 , 0,date("m"),2,date("Y"))); $data = DB::select(" SELECT t1.date_str , COALESCE(t2.date_total_countss,0) as date_total_count FROM( SELECT @cdate:= date_add(@cdate,interval - 1 day) as date_str FROM (SELECT @cdate:=date_add(CURDATE(),interval + 1 day) from lkx_orders) tmp1 WHERE date_format(@cdate,'%Y-%m-%d') >= '$dataMyM' ) t1 LEFT JOIN( SELECT date_format(m.created_at, '%Y-%m-%d') as date_str , sum(price) as date_total_countss FROM lkx_orders as m WHERE date_format(m.created_at,'%Y-%m-%d') >= '$dataMyM' and m.status=1 and sid=$Sid GROUP BY date_str ) t2 on t1.date_str = t2.date_str order by t1.date_str asc "); $priceMyM['data'] = array_column($data,'date_total_count'); $priceMyM['title'] = array_column($data,'date_str'); //獲取上個月數據統計 $dataUpM = date("Y-m-d",mktime(0, 0 , 0,date("m")-1,30,date("Y"))); $Mnum = date("t",strtotime("-1 month")); $dataUpYm = date('Y-m',strtotime("-1 month")); $data = DB::select(" SELECT t1.date_str , COALESCE(t2.date_total_countss,0) as date_total_count FROM( SELECT @cdate:= date_add(@cdate,interval - 1 day) as date_str FROM (SELECT @cdate:=date_add('$dataUpM',interval + 1 day) from lkx_orders) tmp1 limit $Mnum ) t1 LEFT JOIN( SELECT date_format(m.created_at, '%Y-%m-%d') as date_str , sum(price) as date_total_countss FROM lkx_orders as m WHERE date_format(m.created_at,'%Y-%m') = '$dataUpYm' GROUP BY date_str ) t2 on t1.date_str = t2.date_str order by t1.date_str asc "); $priceUpM['data'] = array_column($data,'date_total_count'); $priceUpM['title'] = array_column($data,'date_str'); return array( 'orderNum'=>$orderNum, 'priceMyM'=>$priceMyM, 'price7D'=>$price7D, 'priceUpM'=>$priceUpM, ); } }
新手經百度查詢等方式寫的、如有更好方案請指點一番...
浙公網安備 33010602011771號