使用時に本はいくつかの嫌っています。ログテーブルからユーザーのホワイトリストエントリに、各ユーザーの統計情報を収集、記録IP情報:最近、私は、ファンクションポイントに遭遇しました。
この機能は、一度のみ(初期化)が行われるが、データの量は、大きくなるJavaコードを実行してもよい/ Pythonスクリプトは遅いです。私は圧倒されたと私の小さなパートナーは、ストアドプロシージャを完全考えるのと同じように、ファン総控えめな表現は、SQLまあ、それほど複雑でやっていないことを、言うには?
疑問符を顔、私は予想最も簡単な解決策は、ループのネストされた2つが必要になります、SQLを解決することができますか?
GROUP_CONCAT:ドミンゴは、この時間の関数と言ってくれました。これは、この関数であり、瞬時に私の問題を解決します。
1.需要
オフサイトの検証の頻度を減らすために、ユーザーのホワイトリスト機能を実装したいです、SMS費は、支出を減らします ユーザーログインエクスペリエンスを向上させます。
2.原則
同様の機能は、以前に接触していないために、このメソッドは実装されている:最初の3の後に、ユーザーのIP着陸を格納するためのユーザ・テーブルのフィールドにIPホワイトリストに新しいユーザーを、市に上陸かどうかを決定します。このアプローチは、いくつかの都市では、IPアドレスの大きなスパンを持って、比較的愚かです。時間が経過した後、正確な地方にそれを区別するための方法を記述します。大物はまた、私は他の認証方法を学びましょう、指導を歓迎しました。
3.データのインポート
以前は、大きなテーブルの使用は、ユーザがユーザIDとIP情報を含む前記ユーザインターフェースのコール記録を記録します。この表では、複数の行に対応するユーザは、あるIPは、(あってもよいアカウントの複数に対応する)複数のレコードに対応することができます。私は無意識のうちに仕事を完了するために、JavaプロジェクトまたはPythonスクリプトを書きたかったです。しかし、JavaのツールのJavaプロジェクトをビルドする必要が依存状況を決定するために、Pythonのネイティブ・データベース・リンクの処理が遅い(大量のデータ)です。I小林と協議した後、ストアドプロシージャがトリッキー解決するために、比較的簡単だと思いますか書きます。
ただ、準備ができたら、手を、私とドミンゴが文を訴えた。このような複雑な機能を、どのように完全なSQLだろうか?。ドミンゴは、それが十分なSQLがクリーンアップインポートされたユーザデータテーブルを完了するために、ことを示して、私のニーズを理解し、私は機能をお勧めしますgroup_concat
。
group_concat
、そしてconcat
スプライシングの文字列のため、などです。しかし、concat
シナリオは異なっているgroup_concat
、主に適用されるgroup by
分類文をステッチした後、結果フィールド。基本的な構文は次のとおりです。
group_concat( [distinct] 待连接字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
その声明への問い合わせselect
バッチの後には、簡単にユーザー・グループのIP情報を取得完了することができます。
select SELECT create_user_id, group_concat( DISTINCT concat( '#', SUBSTRING_INDEX ( ip_address, '.', 3 ) ) SEPARATOR '' ) FROM sys_log GROUP BY create_user_id;
設計を満たすために(IPホワイトリストフォーマット#1 xxx.xxx.xxx):前SUBSTRING_INDEX文字列を取得する第三の関数を使用して、連結前に切断するために「#」スプライスIPフィールドを使用して、「」ヌル区切りに置き換え(「」)カンマをデフォルトとなるキーワードの区切りGROUP_CONCAT関数を使用します。実行後、唯一のユーザーのIPは、ユーザーIDと指定されたフォーマットをホワイトリストに登録しました。
変更のユーザテーブルが直接審査員の数を増やし、上記更新SQL文に配置することができ、SQLは、完全なダンプIPアドレスは次のとおりです。
update sys_user a
set a.address_ip = (SELECT group_concat(distinct concat('#', SUBSTRING_INDEX(ip_address, '.', 3)) separator '')
FROM sys_log b
where b.create_user_id = a.id
group by create_user_id);
END〜
参考文献:
センス謝Mingge、小林提案援助
〜について議論することを学ぶために私に連絡して自由に感じます
メール:[email protected]
マイクロチャネル:こんにちは-wgh0807
QQ:490 536 401