新手问题 一个 MySQL 组合查询的问题,应该怎么设计查询语句?

QueXuQ · 2012年12月19日 · 最后由 QueXuQ 回复于 2012年12月20日 · 2141 次阅读

假设我有一个表叫 order,其中 has_many product,表如下:

id     +     name    +     price     +   amount   +    product_id
1      |     团购      |    100     |       5        |      1
2      |     团购      |    50      |       2        |      2
3      |     团购      |    -100    |       -2       |      1
4      |     玩具      |    50      |       3        |      2
5      |     玩具      |    50      |       2        |      2
6      |     玩具      |    100     |       2        |      1

@order = "团购",我想搜索到的结果是:

id     +     name    +     price     +   amount   +    product_id
1      |     团购      |    100     |       3        |      1
2      |     团购      |    50      |       2        |      2

运行 SQL 语句是:@order.group(:product_id).sum(:amount),可是生成的是:

amount   +    product_id
 3       |      1
 2       |      2

运行 SQL 语句是:@order.group(:product_id),可是生成的是:

id     +     name    +     price     +   amount   +    product_id
1      |     团购      |    -100    |       -2       |      1
2      |     团购      |    50      |       2        |      2

请问怎么样才能生成我希望的那种结构呢? 因为我在 views 下,each 就可以把想要的结果输出来了?

最无奈的时候自定义 SQL 查询

你可以看下控制台,它生成了怎样的查询语句

目测你的写的思路不对,你分成了 2 步来执行。。

但组合的结果肯定是不对的,要是你要分 2 不步骤

1)搜索符合条件的产品 IDS

2)根据 IDS 进行 group by , sum

或者就是一步,一个自定义 SQL,或者用 activerecord 查询加过滤

#1 楼 @ihlayy 我想了想,照你这样说法,估计用 Active Record Query Interface 很难写的出来。 得要自定义 SQL,估计。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号