2011-04-11 136 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 

這應該做的。