2

这是我的桌子

id | question | 

id 被分组为

1000 -> 1050
2000 -> 2030
3000 -> 3099
4000 -> 4500
5000 -> 5010

我必须为每组 id 提取 5 条记录和一条。

如何仅使用一个查询来执行此操作?

非常感谢。

4

3 回答 3

0
SELECT *, IF (id > 1000 AND id < 1050, 1, 
          IF (id > 2000 AND id < 2030, 2,
          IF (id > 3000 AND id < 3099, 3,
          IF (id > 4000 AND id < 4500, 4,
          IF (id > 5000 AND id < 5010, 5, 0))))) AS param 
FROM questions WHERE param > 0 GROUP BY param
于 2013-04-08T13:26:20.963 回答
0

要做到这一点,只需一个查询(不使用NedretRecapUNION建议的),您可以将(或类似的列)添加到您的表中并使用 simple 。group_id... GROUP BY group_id

假设保留的组大小始终相同(某些组不可能从上一个开始,而其他组不可能从上开始),您可能可以使用这个简单的技巧:+1000+300

SELECT id
FROM table
GROUP BY FLOOR(id/1000)

这里的工作示例。

于 2013-04-08T13:31:30.490 回答
0
SELECT f1, f2, ... FROM tablename WHERE id BETWEEN 1000 AND 1050 ORDER BY RAND() LIMIT 1
UNION
SELECTS f1, f2, ... FROM tablename WHERE id BETWEEN 2000 AND 2030 ORDER BY RAND() LIMIT 1
UNION
SELECTS f1, f2, ... FROM tablename WHERE id BETWEEN 2000 AND 2030 ORDER BY RAND() LIMIT 1

还有两个用 UNION 选择

于 2013-04-08T13:19:02.617 回答