匹配具有多个无序值的列

时间:2016-02-10 14:34:24

标签: android sqlite android-sqlite

我有以下架构

Table 1 

itemId  : int 
userId1 : int
userId2 : int

我希望找到与两个给定用户ID匹配的行,如

WHERE itemId = myId
  AND (userId1 = myId1 OR userId2 = myId1)
  AND (userId1 = myId2 OR userId2 = myId2)

我的查询输入应为myIdArrayList<Integer>包含2个userIds,我需要将ArrayList与我的列[userId1, userId2]相匹配。

N.B。我不知道ArrayList中用户ID的顺序。

1 个答案:

答案 0 :(得分:1)

我猜你还需要传递myId

的参数

因此,在您的情况下,您的查询将有5个参数占位符(?)。

类似的东西:

... WHERE itemId = ? AND (userId1 = ? OR userId2 = ?) AND (userId1 = ? OR userId2 = ?)

请注意,参数从左到右替换,并且由于您要比较myId1myId2 两次,因此您必须将它们两次在参数数组中。

即。 (位置参数):

... 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}}提供的积分。