MySQL选择所有固定和其他一些标记的记录达到限制

时间:2017-09-08 08:38:03

标签: mysql

我有一个“产品”表,其中存储了所有商店产品,其中一些标有“hp”标志,还有一些标有“hppin”标志

我需要2个标志,因为我从所有标记的“hp”中挑选了10个随机产品(它们可以100个或更多),但我需要获得所有固定的产品。

固定需要始终在10个选定的产品中

我需要10条记录=所有“hppin”标志+随机“hp”标志

示例表

PRODUCTS
| id | name   | hppin | hp |
| 1  | prod1  | y     | y  |
| 2  | prod2  | n     | y  |
| 3  | prod3  | y     | y  |
| 4  | prod4  | n     | y  |
| 5  | prod5  | n     | n  |
| 6  | prod6  | y     | y  |
| 7  | prod7  | n     | y  |
| 8  | prod8  | n     | y  |
| 9  | prod9  | n     | y  |
| 10 | prod10 | n     | y  |
| 11 | prod11 | n     | y  |
| 12 | prod12 | n     | y  |
| 13 | prod13 | n     | y  |
| 14 | prod14 | n     | n  |
| 15 | prod15 | n     | y  |

我可以用2个查询解决这个问题,但我想知道是否可行 只在一个查询中完成。

结果应为记录1,3,6 + 7随机记录,hp = y

1 个答案:

答案 0 :(得分:1)

您可以使用要获取的两组数据之间的联合来表达查询。以下联合的前半部分将检索hppin个是的记录。下半场获得hp是记录。然后,我们使用首先优先考虑hppin匹配的排序来应用10个记录的限制。如果记录少于10条hp,则hppin记录只会输入结果集。

SELECT id, name, hppin, hp, 1 AS position
FROM PRODUCTS
WHERE hppin = 'y'
UNION ALL
SELECT id, name, hppin, hp, 2
FROM PRODUCTS
WHERE hp = 'y'
ORDER BY
    position, RAND()
LIMIT 10