1

(本项目全部用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

4 回答 4

2

如果您要计算每个实体的报价,它是

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

这只会找到至少有一个报价的实体。

于 2012-06-30T19:45:50.943 回答
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 返回一个(可能很大的)记录集,然后对其进行计数。这使用了大量资源而没有太多好处 - 最好COUNT在 SQL 中执行(如上所示)并获得结果。

于 2012-06-30T18:55:14.850 回答
1

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

select entity_id, offer_id
from paid_offers

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

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)
}
于 2012-06-30T19:01:01.513 回答
0

那么如何在数组列表中获取另一列。然后有一个通过每个 offer_id 的循环出口。然后在里面遍历每个 Entity_id 。如果出现多个实体 ID,请不要从您的最终数组列表中删除该 offer_id。

或者为什么不直接使用 SQL 调用呢?

于 2012-06-30T18:42:44.280 回答