SQL - 检查重复值

时间:2012-06-30 18:30:10

标签: javascript sql appcelerator

(这个项目全部用JS编写)

所以,我有一个名为paid_offers的表,以及两个名为offer_identity_id的列 我要做的是获取与单个offer_id相关联的所有entity_id值的计数。

编辑:示例:entity_id A有35个可用的商品(因此,有35行具有唯一的offer_id,但所有相同的entity_id)

因此,获取计数对arrayList.length没问题,但我只需要一种方法来获取实际的数组。谢谢你的帮助!

编辑:根据要求,更多信息!我将把输出用作数组。

因此,这个项目是使用Titanium(来自appcelerator)编写的。除了查询之外我什么都不需要。所以,对于那些不知道的人来说,这里的内容是什么。

var offersList = db.execute("SELECT entity_id FROM paid_offers");

现在,我们的目标不仅仅是获取ID列表,而是获取与每个唯一offer_id值相关联的entity_id值列表。我认为它看起来很接近:

var offersList = db.execute("SELECT offer_id FROM paid_offers WHERE entity_id = entity_id

除非这不起作用,但这是我在思考这个时的思路。

4 个答案:

答案 0 :(得分:2)

如果您正在尝试计算每个实体的优惠,那就是

SELECT entity_id, COUNT(offer_id) As Count
FROM   paid_offers
GROUP BY entity_id

这只会找到至少有一个要约的实体。

答案 1 :(得分:1)

认为你追求的是......

SELECT offer_id, COUNT(*) As Count
FROM   paid_offers
GROUP BY offer_id

哪会有类似的东西。

offer_id   Count
1          1
2          4
3          2
...

请注意,它将排除表中不存在的任何offer_id,因此永远不会有0的计数

关于使用Array.length()进行计数的另一个注意事项 - 它向JS返回一个(可能很大的)记录集,然后对其进行计数。这使用了大量资源而没有太多好处 - 最好在SQL中执行COUNT(如上所示)并获得结果。

答案 2 :(得分:1)

这对于纯SQL来说并不简单或不可能,因为结果中的每一列始终只能是一个值,但您需要一个列表。请尝试这种方法:

select entity_id, offer_id
from paid_offers

在JavaScript中,读取结果并为每个entity_id创建一个数组,并将offer_id附加到该数组。处理完所有查询结果后,您将拥有所需的结构。伪代码:

data = {}
for (entity_id, offer_id in rows) {
    var a = data[entity_id]
    if (a === undefined) {
        a = []
        data[entity_id] = a
    }

    a.push(offer_id)
}

答案 3 :(得分:0)

那么如何在数组列表中获取其他列。然后有一个循环出口,通过每个offer_id。然后在内部浏览每个Entity_id。如果显示多于一个实体Id,请不要从最终数组列表中删除该offer_id。

或者为什么不用SQL调用呢?