右結合を使用して選択クエリに列を追加する方法
P粉564192131
P粉564192131 2024-01-10 18:08:33
0
1
369

電話番号列に基づいてデータベースの通話記録に国コードを追加する方法を見つけようとしています。国とそのダイヤルコード (国と呼ばれます) を含むテーブルがあります。すべてのレコードをクエリして国コードを追加することはできますが、結果をフィルタリングしてページネーションできる必要があります。

私はあまり制御できないシステムを使用しているため、テーブルに新しい列を追加したり、コードの大きな部分を書き直したりすることは実際には選択肢ではありません。それが私が対処しなければならないことです。

国/地域の表。

###名前### 1 ###アイルランド### ###アメリカ合衆国### 1通話記録テーブル。
idダイヤルコード
353 2
id

開始日時終了日時 ###電話番号### 2014-12-18 18:52:12 ###23### 353870000018700000ルーティングテーブル。 ###番号### アクティブ化
ルートIDduration_秒 1 2014-12-18 18:51:12
60 2 2014-12-18 17:41:02 2014-12-18 17:43:02 43
120 id

###23### 123456789009876543211route_id、route_number でグループ化されたすべての一意の電話番号の継続時間の合計値を取得する必要がありますが、発信者を国ごとにグループ化できるように、これらの結果を country_id でグループ化する必要があります。以下の mysql クエリを使用して、期間の合計値、一意の電話番号の合計数を取得します。これらはすべて、route_id、route_number でグループ化されています。このクエリは、ずっと前に別の開発者によって作成されました。 country_id でグループ化できるように、country_id を右側の結合テーブルに追加する作業はすべて完了しました。 以下に示すように、php を使用して各国を反復処理し、where 句を使用して結果を取得できることはわかっていますが、これらの結果を簡単にページ分割したりフィルタリングしたりすることはできません。 ルート ID、ルート番号、国 ID でグループ化できるように、国テーブルを使用して国 ID を含む結合テーブル クエリに列を追加するにはどうすればよいですか?以下の表に示すとおりです。
1 43
リーリー
Left(a.phonenumber, strlen($dialling_code)) = $dialling_code

id

開始日時

終了日時

ルートID ###電話番号###

duration_秒

国ID ###23### 2
P粉564192131
P粉564192131

全員に返信(1)
P粉121447292

routes から callrecord_join への RIGHT JOIN は、すでに INNER JOIN サブクエリが 間にあるため、何も行われません。 Routecallrecord は結合の右側にあります。

説明した結合を使用できます -

リーリー

しかし、同じ結果が得られます:

リーリー

もう少し安くなるといいですね。

が含まれていることをテストして、callrecord 内の番号が複数の国に追加されていないことを確認する必要があります。一部の国際ダイヤル コードはあいまいであるため、使用するダイヤル コード リストによって異なります。

リーリー

明らかに、データセットが非常に大きい場合は、上記のクエリをバッチ処理する必要があります。

物事を単純化しすぎていないことを願っていますが、あなたの質問を理解すると、クエリは次のとおりです。

リーリー

適切なインデックスが利用可能であると仮定して、これらの条件を制御可能にするために、startdatetime から DATE_FORMAT() を慎重に削除してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!
1 2014-12-18 18:51:12 2014-12-18 18:52:123538700000 60 1
2014-12-18 17:41:02 2014-12-18 17:43:02 43 18700000 120 2