ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6の結合テーブル集計クエリを例から解説

ThinkPHP6の結合テーブル集計クエリを例から解説

王雪芹
王雪芹オリジナル
2020-05-12 10:41:449379ブラウズ

先日、友人からジョイントテーブルの集計クエリについて質問されたのですが、この問題は多くの初心者には難しいのではないかと思い、共有したいと思います。

2 つのデータ テーブルがあります:

バス テーブル: ThinkPHP6の結合テーブル集計クエリを例から解説

##ユーザー テーブル:

ThinkPHP6の結合テーブル集計クエリを例から解説

要件: バスに乗る人の数を数える

これを達成するにはどうすればよいですか?

#ステップ 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 つのデータテーブル。

ThinkPHP6の結合テーブル集計クエリを例から解説

#ステップ 2: 集計クエリ

集計クエリを実行する前に、公式マニュアルチュートリアル。

最終的に統計の数を取得したいため、最初に count() メソッドを使用することを決定し、クエリ ステートメントを変更します。 ThinkPHP6の結合テーブル集計クエリを例から解説

$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 は無効であり、エラーになります。 ThinkPHP6の結合テーブル集計クエリを例から解説

mysql 設定を変更できます:

/etc/my.cnf を変更し、sql_mode でonly_full_group_by を削除します= この方法で, 結合テーブルの集計クエリが実現されていますが、この問題に遭遇しても焦らず、最終的なニーズに応じて段階的に分割して実装していきます。

以上がThinkPHP6の結合テーブル集計クエリを例から解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。