2011-04-11 138 views
0

我需要不同4个类别中最新的4个产品。此查询不工作查询优化

SELECT 
    ProductID,ProductName,thumb 
    FROM 
    tbproduct 
    WHERE 
    status =2 
GROUP BY 
`CATEGORYID` 
ORDER BY 
`ProductID` DESC 
LIMIT 4 

,所以我一阶所有records.and使用下面的查询......

SELECT 
ProductID, ProductName, thumb 
FROM 
    (
    SELECT 
    ProductID,ProductName,thumb,CATEGORYID 
    FROM 
    tbproduct 
    WHERE 
    status =2 
    ORDER BY 
    `ProductID` DESC 
) AS tmp 
GROUP BY 
`CATEGORYID` 
ORDER BY 
`ProductID` DESC 
LIMIT 4 

这个查询速度慢任何一个可以建议我的快速查询。我使用MySQL。

+0

1.如果在那里没有限制,那么内心的问题是什么?你能展示那个查询的解释吗? – Pomyk 2011-04-11 06:53:10

+0

不使用子查询,它会降低速度。你能告诉我你从这个查询中得到什么?我不明白你的需要。 – Sakthi 2011-04-11 06:55:17

+0

我需要这些产品是最新的一个产品根据每个category.if我只使用组按顺序,然后该查询不需要最新的记录。所以首先我按所有记录排序。 – Deepa 2011-04-11 06:55:24

回答

0
SELECT 
    Max(ProductID), ProductName,thumb 
    FROM 
    tbproduct 
    WHERE 
    status =2 
GROUP BY 
`CATEGORYID` 
ORDER BY 
ProductID DESC 
LIMIT 4 

这不行吗?


不确定这是否有帮助,请参阅更新后的查询。请参阅使用​​。

注意:这不会可靠地返回其他列。请看看这里的left-self-exclusion join

+0

否这个查询不会带来每个类别的最新4条记录。所以我没有使用这个query.this查询第一组的记录,然后命令由这些记录是 – Deepa 2011-04-11 06:57:02

+0

@Nishant组的结果:对不起,我同时发布了你的答案...我应该删除? – Marco 2011-04-11 06:57:21

+0

@nishant,@ marco我需要来自不同4个类别的最新4个产品,这些查询不起作用。我已经尝试过了。 – Deepa 2011-04-11 06:59:49

1

如果单纯使用:

SELECT 
    ProductID,ProductName,thumb,CATEGORYID 
    FROM tbproduct 
    WHERE status=2 
    GROUP BY CATEGORYID 
    ORDER BY ProductID DESC 
    LIMIT 4 
0
SELECT 
ProductID, ProductName, thumb 
FROM tbproduct 
WHERE ProductID in (
    SELECT max(ProductID) 
    FROM tbproduct 
    WHERE status = 2 
    GROUP BY CATEGORYID 
    ORDER BY ProductID DESC 
    LIMIT 4 
) ORDER BY ProductID DESC 

这应该做的。