(这个项目全部用JS编写)
所以,我有一个名为paid_offers
的表,以及两个名为offer_id
和entity_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
除非这不起作用,但这是我在思考这个时的思路。
答案 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调用呢?