在我的Scala应用程序中,我正在尝试确定MySQL数据库中某个表的一列中存在字符串列表中的哪些值。
具体来说,我的表定义如下:
朋友
====
friendshipId | userId | friendId
用户
=====
userId | ...... | facebookId
目前在我的程序中,通过http GET
调用Facebook图形API,我已经能够在给定访问令牌的情况下检索朋友的Facebook ID列表,并将其解析为{{1 }}
让我感到困惑的是,如何在我的用户表格中针对“List[String]
”列交叉检查此{1}} Facebook ID。一旦我检索两者之间的公共元素(具有匹配FB ID的行的User.userIds),我希望在我的Friend表中为每个公共元素插入两行:1行包含当前用户的userId和朋友User.userId,和两个交换的另一行。这标志着两者之间的“友谊”。
最初,我尝试使用List[String]
子句执行facebookId
,其中friendListString是我的SELECT
个ID的逗号分隔字符串列表:
离。 IN
List[String]
然而,我找不到一个简单的干净方法来使用Anorm将其解析为Scala friendListString = ['firstId', 'secondId', ... 'lastId]
。我希望将其解析为val friendIdQuery = SQL("SELECT userId FROM User WHERE facebookId IN {facebookIdList};")
.on("facebookIdList" -> friendListString)
,然后遍历此列表并在每次迭代中对Friend表执行2次SQL插入。
即使我能够解析List [String],这对我来说听起来很昂贵,不得不遍历整个朋友ID列表。所以我认为必须有一些复杂的嵌套SQL查询我可以调用来实现所有这些?我的SQL技能非常生疏:(