【发布时间】:2012-03-29 00:41:56
【问题描述】:
我有一个根据关键字获取产品 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
我想将 price_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
这是否可以在不破坏额外查询的情况下完成?
【问题讨论】:
-
如果你能在产品表中做一个价格列,可以轻松一点
-
产品表中已有价格列。那我做错了吗?在获得所有产品 ID 后,我访问产品表。加入似乎让它变慢了
标签: mysql