2016-02-24 62 views
0

我需要从表中随机选择一定比例的行。正如我使用MySQL,我知道如何随机选择记录,正如我从这个问题可以看出:how to randomly select rows in SQL,但仍然有一件事缺少:如果我有10000行,百分比是10%,我会选择1000行从数据库。我怎样才能做这些行分页?如何从MySQL中随机选择行进行分页?

+0

您必须在查询结束时设置限制。 **例如:**'$ sql =“SELECT * FROM Orders LIMIT 15,10”;' –

回答

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 */ 
); 

用户每次从表中请求行的新的百分比,你会:

  • 随机从主表中选择行
  • 创建表的新纪录percent_request以跟踪该用户请求
  • 在表中指定该特定用户请求中的每个选定行的百分比表请求中插入X条记录
  • 那么你就可以通过SQL查询提供所请求的比例,逐页象下面这样:

如:

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 

希望是有道理的!