2012-09-21 119 views
1

我有一个查询mysql查询子查询循环?

SELECT 
    count(product) as amount, 
    product, 
    sum(price) AS price 
FROM `products` 
WHERE 
    brid = 'broker' 
AND 
    cancelled is null 
GROUP BY product 
WITH ROLLUP 

是否可以查询表得到一个经纪人ID,然后为每个代理运行查询,上面写的是1个查询?

几乎像:

SELECT brid FROM membership 
THEN 

SELECT 
    count(product) as amount, 
    product, 
    sum(price) AS price 
FROM `products` 
WHERE 
    brid = membership.brid 
AND 
    cancelled is null 
GROUP BY product 
WITH ROLLUP 

THEN 
SELECT NEXT brid 

这可能吗?我知道如何在PHP中做到这一点,但我更喜欢1查询可以创建一个数组而不是每个查询吨。

谢谢 亚当。

回答

0
SELECT 
    count(product) as amount, 
    product, 
    sum(price) AS price 
FROM `products` 
INNER JOIN membership on membership.brid = products.brid 
WHERE 
    cancelled is null 
GROUP BY product 
WITH ROLLUP 
3

当然,您可以GROUP BY“brid”字段和“product”字段。如下文所述,WITH ROLLUP将导致其由“布里德”进行排序,然后通过“产品”:

SELECT 
    brid, 
    count(product) as amount, 
    product, 
    sum(price) AS price 
FROM `products` 
WHERE 
    brid IN (SELECT brid FROM membership) 
AND 
    cancelled is null 
GROUP BY brid, product 
WITH ROLLUP 
+0

在PhpMyAdmin中测试并得到---#1221 - 错误地使用了CUBE/ROLLUP和ORDER BY –

+1

你是对的,'WITH ROLLUP'排除了'ORDER BY'的使用并且已经为你排序 - 所以你可以跳过ORDER BY子句。更新。 – PinnyM

+0

谢谢!现在正常工作! –

0

据我可以从你的例子明白,你需要的是inner join between membership and products on brid

拿下面的例子:

products表:

CREATE TABLE `test` (
    `price` int(11) DEFAULT NULL, 
    `product` varchar(20) DEFAULT NULL, 
    `brid` varchar(20) DEFAULT NULL, 
    `cancelled` varchar(20) DEFAULT NULL 
) 

membership表:

CREATE TABLE `membership` (
    `brid` varchar(20) DEFAULT NULL 
) 

而下面是我query,你需要:

SELECT 
    t.brid, count(t.product) as amount, 
    t.product, 
    sum(t.price) AS price 
FROM products t, membership m 
WHERE 
    t.brid = m.`brid` 
AND 
    cancelled is null 
GROUP BY product 

希望帮助!