ホームページ > 記事 > PHPフレームワーク > ThinkPHP6の結合テーブル集計クエリを例から解説
先日、友人からジョイントテーブルの集計クエリについて質問されたのですが、この問題は多くの初心者には難しいのではないかと思い、共有したいと思います。
2 つのデータ テーブルがあります:
バス テーブル:
##ユーザー テーブル:
要件: バスに乗る人の数を数える
これを達成するにはどうすればよいですか?#ステップ 1: テーブルの結合#このシナリオでは、必ず 2 つのデータ テーブルを結合する必要があります。統計を最初に考慮するのではなく、2 つのデータ テーブルを結合します。
$data=Db::name('user')->alias('a')->join('bus b','a.user_id=b.user_id')->select()->toArray();
alias はエイリアス、join はジョイント テーブルのデータ テーブル、ジョイント テーブル条件 a.user_id=b.user_id があるため、 2 つのデータテーブル。
#ステップ 2: 集計クエリ集計クエリを実行する前に、公式マニュアルチュートリアル。
最終的に統計の数を取得したいため、最初に count() メソッドを使用することを決定し、クエリ ステートメントを変更します。
$data=Db::name('user')->alias('a')->field('count(b.user_id) AS c'')->join('bus b','a.user_id=b.user_id')->select()->toArray();このうち c はエイリアスです。 user_id フィールドに基づいて集計クエリを実行する必要があります。統計はこのフィールドに基づいているため、group(user_id)、つまり user_id フィールドに従ってグループ化する必要があります。 クエリ ステートメントの変更を続けます:
$data=Db::name('user')->alias('a')->field('count(b.user_id) AS c')->join('bus b','a.user_id=b.user_id')->group('a.user_id')->select()->toArray();このようにして、最終的なクエリ結果が得られます。 3 番目のポイント: 状況に注意してください
上記のクエリ ステートメントでは、mysql のバージョンが 5.7 の場合、特別な料金を支払う必要があります。注意。たとえば、mysql5.7 のフィールドに a.* を追加すると、次のようなエラーが報告されます。
MYSQL5.7 には、パフォーマンス向上のため sql_mode に制限があります。
ONLY_FULL_GROUP_BY: GROUP BY 集計操作の場合、SELECT の列が GROUP BY にない場合、その列が GROUP BY 句にないため、この SQL は無効であり、エラーになります。
mysql 設定を変更できます:
/etc/my.cnf を変更し、sql_mode でonly_full_group_by を削除します= この方法で, 結合テーブルの集計クエリが実現されていますが、この問題に遭遇しても焦らず、最終的なニーズに応じて段階的に分割して実装していきます。
以上がThinkPHP6の結合テーブル集計クエリを例から解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。