我有以下架构
Table 1
itemId : int
userId1 : int
userId2 : int
我希望找到与两个给定用户ID匹配的行,如
WHERE itemId = myId
AND (userId1 = myId1 OR userId2 = myId1)
AND (userId1 = myId2 OR userId2 = myId2)
我的查询输入应为myId
,ArrayList<Integer>
包含2个userIds,我需要将ArrayList
与我的列[userId1, userId2]
相匹配。
N.B。我不知道ArrayList
中用户ID的顺序。
答案 0 :(得分:1)
我猜你还需要传递myId
因此,在您的情况下,您的查询将有5个参数占位符(?
)。
类似的东西:
... WHERE itemId = ? AND (userId1 = ? OR userId2 = ?) AND (userId1 = ? OR userId2 = ?)
请注意,参数从左到右替换,并且由于您要比较myId1
和myId2
两次,因此您必须将它们两次在参数数组中。
即。 (位置参数):
... WHERE itemId = ? AND (userId1 = ? OR userId2 = ?) AND (userId1 = ? OR userId2 = ?)", new String[]{myId, myId1, myId1, myId2, myId2};
注意:随意选择query()
或`rawQuery()来获取光标(添加到 SELECT 离子的其余部分)。它是一样的。
<强> [编辑] 强>
你可能想尝试这个(更好的)替代方案:命名参数(!!)
... WHERE itemId = @myID AND (userId1 = @myId1 OR userId2 = @myId1) AND (userId1 = @myId2 OR userId2 = @myId2)", new String[]{myId, myId1, myId2};
在这种情况下,参数数组可以包含非重复值 @CL为@ {3}}提供的积分。