2012-03-29 14 views
0

キーワードに基づいて商品IDを取得するクエリがあります。複数のグループを持つmysqlクエリ?

SELECT indx_search.pid 
FROM indx_search 
LEFT JOIN word_index_mem ON (word_index_mem.word = indx_search.word) 
WHERE indx_search.word = "phone" 
GROUP BY indx_search.pid 
ORDER BY indx_search.pid ASC 
LIMIT 0,20 

これはうまくいきましたが、今私はさらに進んで、このクエリに「価格帯」を実装しようとしています。

CREATE TABLE `price_range` (
`pid` int(11) NOT NULL, 
`range_id` tinyint(3) NOT NULL, 
PRIMARY KEY (`pid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

この表には、製品IDとrange_idが含まれています。価格帯値がここに格納されています

CREATE TABLE `price_range_values` (
`ID` tinyint(3) NOT NULL AUTO_INCREMENT, 
`rangeFrom` float(10,2) NOT NULL, 
`rangeTo` float(10,2) NOT NULL, 
PRIMARY KEY (`ID`) 
) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=latin1 

は、私は多くの製品は、現在のクエリ内の特定の価格帯と一致するかのCOUNT()とGROUPのprice_range.range_idにしたいです。私はまだ製品IDの20件の結果を受け取っています。

だから、の線に沿って何か:

SELECT indx_search.pid, price_range.range_id as PriceRangeID, COUNT(price_range.range_id) as PriceGroupTotal 
FROM indx_search 
LEFT JOIN windex_mem ON (windex_mem.word = indx_search.word) 
LEFT JOIN price_range ON (price_range.pid = indx_search.pid) 
WHERE indx_search.word = "memory" 
GROUP BY indx_search.pid, PriceRangeID 
ORDER BY indx_search.pid ASC 
LIMIT 0 , 20 

が、これは追加のクエリを破裂せずに達成することは可能ですか?

+0

あなたが製品テーブル内の価格の列がすでにありますビット –

+0

を緩和することができます製品テーブル内の価格の列を作ることができます。私はこれを間違ったやり方でやっていますか?私はすべての私の製品IDを取得した後私は製品テーブルにアクセスします..参加は道順が遅くなるようです – nick

答えて

0

LIMIT句の付いたサブクエリを使用してください。 -

SELECT 
    i_s.pid, p_r.range_id as PriceRangeID, COUNT(p_r.range_id) as PriceGroupTotal 
FROM 
    (SELECT * FROM indx_search WHERE i_s.word = 'memory' ORDER BY i_s.pid ASC LIMIT 0 , 20) i_s 
LEFT JOIN 
    windex_mem w_m ON w_m.word = i_s.word 
LEFT JOIN 
    price_range p_r ON p_r.pid = i_s.pid 
GROUP BY 
    i_s.pid, PriceRangeID 
+0

問題は、サブクエリは20の結果を返します。私は、キーワードと一致する15000件の結果全体を処理したいと思います。 – nick

関連する問題