有多个组的mysql查询?

时间:2012-03-29 00:41:56

标签: mysql

我有一个根据关键字获取产品ID的查询。

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

我想将GROUP_range.range_id与COUNT()组合在一起,以确定当前查询中的特定价格范围内有多少产品匹配。我仍然希望收到我的20个产品ID结果。

这就是:

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

这可以在不破坏其他查询的情况下完成吗?

1 个答案:

答案 0 :(得分: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