【问题标题】:mysql query with multiple groups?具有多个组的mysql查询?
【发布时间】: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


【解决方案1】:

尝试使用带有 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

【讨论】:

  • 问题是,子查询只会返回20个结果。我想处理与关键字匹配的整个 15000 个结果。
猜你喜欢
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多