2013-05-12 65 views
0

我有一个客户,我正在开发一个视频网站。他希望从数据库中提取两个视频,以显示前端用户进行投票。从数据库中提取记录,优先选择具有较高投票数的记录

视频表有一个“投票”字段。他希望随机抽取视频,但对具有较高投票数的视频有更高的偏好。某些类型的算法,其中的投票是偏好的,但不是直接的“最高票2个视频被拉”。

任何想法?

继承人什么我的视频表如下所示:

$data[] = array(
     'id' => $row->id, 
     'filename' => $row->filename, 
     'added' => $row->added, 
     'userId' => $row->userId, 
     'contestId' => $row->contestId, 
     'complete' => $row->complete, 
     'ended' => $row->ended, 
     'votes' => $row->votes 
    ); 
+0

这就是你的数据阵列的样子。你的视频表(我猜)看起来有点不同。 – Strawberry 2013-05-12 17:04:53

回答

0

只要使用的ORDER BY votes * ($offset + rand()) DESC,其中偏移余额的随机一个很好的平衡之和。如果偏移量为0,则它​​大部分是随机的,如果偏移量为1或更高,则未提交的视频将永远不会显示。

您可以尝试几次干运行得到的视频,看看你是否喜欢它。 ;-)

编辑:

答案取决于选票,这将是在数据库的范围和分布。

0

考虑以下...

SELECT * FROM weighted; 
+----+--------+ 
| id | weight | 
+----+--------+ 
| 1 |  3 | 
| 2 |  1 | 
| 3 |  6 | 
| 4 |  5 | 
| 5 |  10 | 
| 6 |  2 | 
| 7 |  3 | 
| 8 |  7 | 
| 9 |  7 | 
+----+--------+ 

So, crudely... 

SELECT *,RAND()*weight FROM weighted; 
+----+--------+--------------------+ 
| id | weight | RAND()*weight  | 
+----+--------+--------------------+ 
| 1 |  3 | 1.7466305203238788 | 
| 2 |  1 | 0.6615251914239724 | 
| 3 |  6 | 3.3659728051777673 | 
| 4 |  5 | 4.102008970549338 | 
| 5 |  10 | 4.190225986940997 | 
| 6 |  2 | 1.2678152837490806 | 
| 7 |  3 | 2.737411332072142 | 
| 8 |  7 | 4.624405276611824 | 
| 9 |  7 | 3.9601472736896457 | 
+----+--------+--------------------+ 

SELECT *,RAND()*weight x FROM weighted ORDER BY x DESC LIMIT 1; 
+----+--------+--------------------+ 
| id | weight | x     | 
+----+--------+--------------------+ 
| 8 |  7 | 4.6799722441285585 | 
+----+--------+--------------------+ 

SELECT *,RAND()*weight x FROM weighted ORDER BY x DESC LIMIT 1; 
+----+--------+-------------------+ 
| id | weight | x     | 
+----+--------+-------------------+ 
| 9 |  7 | 5.331623214605845 | 
+----+--------+-------------------+ 

SELECT *,RAND()*weight x FROM weighted ORDER BY x DESC LIMIT 1; 
+----+--------+-------------------+ 
| id | weight | x     | 
+----+--------+-------------------+ 
| 4 |  5 | 4.931961209449881 | 
+----+--------+-------------------+ 

SELECT *,RAND()*weight x FROM weighted ORDER BY x DESC LIMIT 1; 
+----+--------+-------------------+ 
| id | weight | x     | 
+----+--------+-------------------+ 
| 8 |  7 | 6.230309537826394 | 
+----+--------+-------------------+ 

SELECT *,RAND()*weight x FROM weighted ORDER BY x DESC LIMIT 1; 
+----+--------+-------------------+ 
| id | weight | x     | 
+----+--------+-------------------+ 
| 5 |  10 | 5.470934962361059 | 
+----+--------+-------------------+ 
相关问题