私の Scala アプリケーションでは、文字列のリストのどの値が MySQL データベースのテーブルの列の 1 つに存在するかを判断しようとしています。
具体的には、次のように定義されたテーブルがあります。
フレンド
====
フレンドシップ ID | ユーザー ID | フレンドID
ユーザー
=====ユーザー
ID | ... | FacebookのID
現在、私のプログラムでは、Facebook グラフ API への httpGET
呼び出しを通じて、アクセス トークンを指定して友人の Facebook ID のリストを取得し、List[String]
.
私を混乱させているのは、このList[String]
Facebook ID をfacebookId
User テーブルの " " 列と照合する方法です。2 つの間の共通要素 (一致する FB ID を持つ行の User.userIds) を取得したら、共通要素ごとに Friend テーブルに 2 つの行を挿入したいと思います。 2つが入れ替わった別の行。これは、2人の「友情」を意味します。
SELECT
最初に、 with句を実行しようとしましたIN
。ここで、friendListString は、自分List[String]
の IDのカンマ区切りの文字列リストです。
元。friendListString = ['firstId', 'secondId', ... 'lastId]
val friendIdQuery = SQL("SELECT userId FROM User WHERE facebookId IN {facebookIdList};")
.on("facebookIdList" -> friendListString)
List[String]
しかし、 Anorm を使用してこれを Scala として解析する簡単でクリーンな方法を見つけることができませんでした。私の希望は、これを として解析し、List[String]
このリストを反復処理して、各反復で Friend テーブルに 2 つの SQL 挿入を実行することでした。
List[String] を解析できたとしても、友人の ID のリスト全体をトラバースしなければならず、コストがかかるように思えました。だから私は、これらすべてを達成するために呼び出すことができる複雑なネストされた SQL クエリが必要だと考えていましたか? 私のSQLスキルはかなり錆びています:(