A、統計にCOUNT()メソッドは、再:
// 明確な重いアクションの統計にのみ、パラメータCOUNTメソッド内でフィールドの前に置くために、エンドCOUNT()メソッドでは、最後の連鎖 //間違った言葉遣い: $クエリ - > DISTINCT(真の) - >フィールド、( ' > WHERE( - 「)ots.order_no $地図) - > COUNT (); // 生成され、このようなSQL DISTINCT SELECT COUNT(*)ASは`order_ticket_sell` FROM think_count // 正しい言葉遣い: $クエリ - > WHERE($地図) - > COUNT( 'DISTINCT ots.order_no' ); // 生成され、このようなSQL SELECT COUNT(DISTINCT `ots`.`order_no`)ASは FROM`のorder_ticket_sell`をthink_count
第二に、WHEREクエリを渡されるクエリ文字列を受け取るために設けられていてもよい_string ThinkPHP3.2は、クエリ条件は配列にアレイと一緒に混合されるアレイパラメータ。ThinkPHP6使用Dbの::生は、()複合問合せを達成するために_string置き換えます。
使用Dbの::生()関数は、MySQLのフィールドを使用することができます。
// 原来ThinkPHP3.2这样写的: もし(空($ count_type )) { $マップ [ 'sell_time'] = 配列(配列( 'NEQ'、 'NULL')、アレイ( 'EGT'、$ dtBegin)アレイ( 'ELT'、$ DTEND ))$ tsort = 'order_ticket_sell.sell_timeのDESC' 。
} 他 { $マップ [ '_string'] =「CONCAT(tic_feature.date、」 'tic_feature.time)> ='」。$ dtBegin。" 'およびCONCAT(tic_feature.date、' 'tic_feature.time)<='"。$ DTEND。"'" ; $ tsort = 'tic_feature.dateのDESC、tic_feature.time desc'です。 } // 现在ThinkPHP6可以改成这样了: もし(空($ count_type )){ $ key_map [ 'sell_time'] = 配列( 'ots.sell_time'、 'と'、配列($ dt_begin、$ dt_end ))。 他{ $ tic_ft_raw = Dbと:: RAW( "連結(tic_f.date、 ''、tic_f.time)" ); $ key_map [ 'tic_ft_time'] = 配列($ tic_ft_raw [ 'BETWEEN、' $ dt_begin、$ dt_end ]); $ tsort = [ 'tic_f.date' => 'DESC'、 'tic_f.time' => 'DESC' ]; }
// ThinkPHP6 WHERE ThinkPHP3.2の連想配列の使用とは異なり、それほどクエリを保存するために、独自の連想配列を構築し、クエリを変更または削除する必要があるので、あなたは簡単に関連付けられているキーから変更または解除するために、関連するキーを使用することができます。たとえば、次のクエリはpay_methodを照会する必要がありません:
UNSET($ key_map [ 'sell_time'] );
// クエリpay_methodが入るに出言及削除:
$ array_values地図=($ key_map [ 'sell_time'] );
:三、クエリオブジェクトがあれば上のクエリなので、少ないコードの冗長性は、効率が高いの修正などとして、再利用することができます
//(「場所」)最初removeOptionを覚えて、Queryオブジェクトが最初に作成された多重化されている場合は、それ以外のWHRER条件を更新するが、元のWHERE条件に追加されない、新しいコールに入りますWHERE条件: $ key_map [ 'pay_method'] = 配列( 'otd.pay_method'、 '='、1); // 会員カードの支払は、 地図$ = array_values($ key_mapを); $ ots_query - > removeOption( 'WHERE' ); $ cardpaytotal = $ ots_query - >($地図) - > SUM( '価格');
'sell_time'