Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择所有固定记录和其他一些标记记录以达到限制_Mysql - Fatal编程技术网

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

MySQL选择所有固定记录和其他一些标记记录以达到限制,mysql,Mysql,我有一个products表,其中存储了所有商店的产品,其中一些带有hp标志,另一些带有hppin标志 我需要2个标志,因为我从所有hp标记的产品中随机挑选10个产品,它们可以是100个或更多,但我需要得到所有固定的一个 钉住的产品必须始终位于选定的10种产品内 我需要10条记录=所有hppin标志+随机hp标志 示例表 PRODUCTS | id | name | hppin | hp | | 1 | prod1 | y | y | | 2 | prod2 | n

我有一个products表,其中存储了所有商店的产品,其中一些带有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

您可以使用要获取的两组数据之间的并集来表达查询。以下联合的前半部分检索hppin yes记录。下半部分获得hp yes记录。然后,我们使用优先于hppin匹配的顺序应用10条记录的限制。只有当hppin记录少于10条时,hp记录才会进入结果集,您的样本数据就是这样

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

在2之后处于不必要的位置?选择id、名称、hppin、hp、2作为position@al404IT除第一个查询外,任何联合查询中的别名都将被忽略。