具有多个LIMITS的MySQL查询

时间:2010-11-20 01:41:55

标签: mysql select limit

假设我的下表中有数百种不同颜色的玩具......

---------------------------
  ITEM  |  COST  |  COLOR
---------------------------
    1   |  12.00 |  BLUE
    2   |  10.98 |  RED
    3   |   9.34 |  BLUE
    4   |  11.33 |  WHITE
    5   |   8.00 |  YELLOW
    .   |    .   |    .
    .   |    .   |    .
    .   |    .   |    .

如果我想选择三个价格最低的蓝色玩具,我当然可以写...

SELECT * FROM TOYS WHERE Color = 'BLUE' ORDER BY COST LIMIT 3;

但是,有没有办法可以选择一个价格最低的黄色,白色和蓝色玩具,就像我说的那样......

 SELECT * FROM TOYS WHERE COLOR = 'YELLOW' (LIMIT 1) AND COLOR = 'WHITE' (LIMIT 3) AND COLOR = 'BLUE' (LIMIT 2) ORDER BY COST

是否可以在MySQL中完全执行此操作而无需在PHP中遍历数组?

5 个答案:

答案 0 :(得分:7)

为什么不呢?

select * from toys where color = 'Yellow' (LIMIT 1)
UNION
select * from toys where color = 'White' (LIMIT 3)
UNION
select * from toys where color = 'Blue' (LIMIT 2)

答案 1 :(得分:0)

嗯,恕我直言,你在这里得到了2个选项,但是,我仍然会合并数组,因为它不需要像UNION这么多时间/系统资源。 (基于你所说的表有很多行)

答案 2 :(得分:0)

这正常工作

softmax

答案 3 :(得分:0)

ROW_NUMBER()可以使用:

SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY COLOR ORDER BY COST) AS RN
      FROM TOYS
      WHERE COLOR IN ('YELLOW', 'WHITE', 'BLUE')) sub
WHERE RN <= CASE COLOR WHEN 'YELLOW' THEN 1 WHEN 'WHITE' THEN 3 WHEN 'BLUE' THEN 2 END  

答案 4 :(得分:-1)

对我来说,解决方案是创建3个不同的查询并合并PHP中的3个数组