我有一个“产品”表,其中存储了所有商店产品,其中一些标有“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
答案 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