我无法弄清楚我是否需要一个独特的或一组的 或者我可能完全离开了。
这是我当前的查询
SELECT * FROM `product_sales`
WHERE `VisitorSessionId` IN
(
SELECT `VisitorSessionId` from `product_sales`
WHERE `ProductId` = 68 AND `SiteId` = 1
)
AND `SiteId` = 1
ORDER BY id DESC LIMIT 0,200
这将是我用当前查询得到的结果集的一个例子
Id SiteId VisitorSessionId TimeStamp OrderId ProductId CustomerId
65655 1 -327 1430798400 30133 84 19262
65654 1 -327 1430798400 30133 84 19262
65653 1 -327 1430798400 30133 68 19262
65652 1 -327 1430798400 30133 68 19262
65333 1 -435 1429848000 29969 68 19211
65332 1 -435 1429848000 29969 68 19211
65331 1 -435 1429848000 29969 90 19211
65330 1 -435 1429848000 29969 90 19211
65100 1 -504 1429329600 29871 5632 12688
65099 1 -504 1429329600 29871 5632 12688
但我想要的是每OrderId
和ProductId
因此,我可以在同一OrderId
ProductId
但不是同一OrderId
的多行
因此,例如,这就是id喜欢获取
Id SiteId VisitorSessionId TimeStamp OrderId ProductId CustomerId
65654 1 -327 1430798400 30133 84 19262
65652 1 -327 1430798400 30133 68 19262
65332 1 -435 1429848000 29969 68 19211
65330 1 -435 1429848000 29969 90 19211
65099 1 -504 1429329600 29871 5632 12688
当我使用组时,我只获得每个OrderId
如何获得预期结果?
答案 0 :(得分:2)
在MySQL中,可以使用group by
来实现此目的:
SELECT ps.*
FROM `product_sales` ps
WHERE `VisitorSessionId` IN (SELECT `VisitorSessionId`
FROM `product_sales`
WHERE `ProductId` = 68 AND `SiteId` = 1
) AND
`SiteId` = 1
GROUP BY productId, orderId
ORDER BY id DESC
LIMIT 0,200;
但是,这使用MySQL扩展,group by
中的列不在group by
中。这些来自 indeterminate 行,甚至不保证它们来自同一行(尽管它们将来自与该组匹配的“正确”行)。
也许这满足了你的需要。否则,您将需要更复杂的查询。我可能会建议这种变化:
SELECT ps.orderid, ps.siteid, ps.VisitorSessionId, ps.TimeStamp, ps.OrderId,
group_concat(ProductId)
FROM `product_sales` ps
WHERE `SiteId` = 1
GROUP BY ps.orderid, ps.siteid, ps.VisitorSessionId, ps.TimeStamp, ps.OrderId
HAVING SUM(`ProductId` = 68 AND `SiteId` = 1) > 0
ORDER BY orderId DESC
LIMIT 0, 200;
每个订单产生一行,满足ProductId
= 68 AND SiteId = 1`,产品包含在链接列表中。