我需要按一定百分比随机选择表格中的行。当我使用MySQL时,我知道如何随机选择记录,正如我从这个问题中可以看到的那样:how to randomly select rows in SQL,但仍然有一件事缺失:如果我有10000行,百分比是10%,我将从db中选择1000行。我怎样才能对这些行进行分页?
答案 0 :(得分:0)
如果排序为RAND(),则无法通过添加简单的“LIMIT X,Y”来通过单独的请求进行分页。
1)简单方法:单个用户
一种简单的方法可能是向行中添加一个新字段(整数),然后随机为每个字段分配一个数字,使用该列进行排序,然后应用LIMIT X,Y来提取分页结果。 这里明显的限制是所有行只有1个排序顺序。例如,如果您需要让多个用户从该表中提取不同的结果,它将无法正常工作。
2)更复杂的方法:多用户
如果您需要让多个用户在这些约束下使用此数据库,那么每次用户从这些行请求新的“百分比”时,您都需要“保存”数据库中的选定行。 您需要添加两个表,以便保存每个“百分比请求”并可以单独浏览。 例如:
CREATE TABLE percentage_request (
request_id int AUTO_INCREMENT,
percentage_requested int
);
CREATE TABLE percentage_request_item (
request_id int,
row_id int, /* foreign key pointing to a row */
order_index int /* create your own order index here */
);
每次用户从表中请求新的行百分比时,您都会:
例如:
SELECT *
FROM percentage_request_item
INNER JOIN table_rows ON table_rows.id = percentage_request_item.row_id
WHERE request_id = $user_request_id
ORDER BY order_index ASC
LIMIT 100 OFFSET 0
希望有意义!