假设我的下表中有数百种不同颜色的玩具......
---------------------------
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中遍历数组?
答案 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个数组