Php 问题|从数据库中获取随机值,如何不重复它们

Php 问题|从数据库中获取随机值,如何不重复它们,php,sql,random,repeat,Php,Sql,Random,Repeat,我正在创建一个网站,从数据库获取随机视频。 我的问题是,我获取随机视频的代码如下: select id,content from videos order by rand() limit 1 我不希望用户看到相同的视频,直到之前至少播放了3个其他视频 你对怎么做有什么建议吗? 这就是我的网站目前的工作方式 用于视频URL的HTML-AJAXCALL PHPRETURN随机视频URL一个视频。 AJAXDISPLAY视频 [已编辑] 我面临的另一个问题是,我只需要返回一个视频url, 因为这就是

我正在创建一个网站,从数据库获取随机视频。 我的问题是,我获取随机视频的代码如下:

select id,content from videos order by rand() limit 1
我不希望用户看到相同的视频,直到之前至少播放了3个其他视频

你对怎么做有什么建议吗? 这就是我的网站目前的工作方式

用于视频URL的HTML-AJAXCALL PHPRETURN随机视频URL一个视频。 AJAXDISPLAY视频 [已编辑] 我面临的另一个问题是,我只需要返回一个视频url, 因为这就是我的ajax调用的样子:

success: function(data){

            $('#content').html('<div id="ytapiplayer">You need Flash player 8+ and JavaScript enabled to view this video.</div>');
            var params = { allowScriptAccess: "always" };
            var atts = { id: "ytapiplayer" };
            swfobject.embedSWF(data.vidData+"&enablejsapi=1&playerapiid=ytapiplayer?autoplay=1", "ytapiplayer", "500", "405", "8", null, null, params, atts);
}

提前感谢。

能否将视频id发送给客户端?然后客户端Javascript从那里请求视频。以下是如何发挥这一作用:

Ajax是视频id的列表 将它们插入javascript var toWatch中的数组中 随机排列 获取第一个视频 从第一个数组中删除id。您可能希望在其他数组中保留该id的跟踪 重复4-5次 在javascript中,它可能看起来像:

$.post("getVideoId.php",function(videoId){
   var aVideoToWatch = videoId.split(',').sort(randOrd);

   for(var x=0; x<aVideoToWatch.length;x++){
       $.post("getAVideo(aVideoToWatch[x])",function(){
           //play the video
       })
   }
})

// source : http://javascript.about.com/library/blsort2.htm
function randOrd(){
 return (Math.round(Math.random())-0.5); }

您可以使用我们将获取15个,这样就不必对服务器进行太多查询:

SELECT id, content FROM videos ORDER BY RAND() LIMIT 15
将这十五个视频交给浏览器,允许浏览器请求视频。一旦看到15个,它就可以向服务器再要3个。它可以通过存储播放的视频ID跳过已经播放的视频

如果您通过Ajax和JSON交付结果,则只需返回结果数组的串联:

<?php
$query = $pdo->query('SELECT id, content FROM videos ORDER BY RAND() LIMIT 10');
$videos = $query->fetchAll();
echo json_encode($videos);
?>

在这种情况下,您需要记住在临时表中选择的视频,并测试是否未选择重复。切勿使用order by rand。这是一个性能杀手@Rijk van Wel,那么我应该使用什么呢?这里有一个使用Google找到的替代方法:是的,视频id实际上是通过YECHO json_encodearrayid=>$random_vid[0],vidData=>$random_vid[1]发送的;。用饼干做了同样的尝试,但没用。。。你所说的:Ajax视频列表是什么意思?什么名单?php的角色是什么?返回什么?不要使用cookie,如果使用ajax,不要刷新页面。使用对话框代替。像imbd,什么是对话?我编辑了我的问题,你能回答吗?所以getVideoid.php应该在每次ajax调用中输出大约5个视频,然后重复js部分?现在是你的调用。它可以得到所有的视频或只有最新的5。这是一个非常粗糙的例子。你的意思是:1选择id,来自视频订单的内容BR RAND LIMIT 3选择id,来自视频订单的内容BR RAND LIMIT 3,3选择id,来自视频订单的内容BR RAND LIMIT 6,3等等。。。?BR代表什么?BR是BY的一个拼写错误。我建议,如果您一次查询数据库中的三个视频,它们将是唯一的,因为ORDER BY将返回所有不重复的行。是的,我想你理解得对。是的,但类似的事情可能会发生:第一代:6,11,9,然后第二代:9,4,6,在第一代之后会显示视频id 9两次,我已经测试过了。我的错误,你可以修复。请给我一分钟时间更新我的JS。谢谢你花时间和心思在这上面,但我对@David Laberge解决方案有了更好的理解。谢谢你,我真的很感激;
(function playRandomVideos() {  //Closures are cool
    $.getJSON('getRandomVideos.php', {success: function(videos) {
        for(video in videos) {
            if(video.id in playRandomVideos.played) {
                continue;
            }
            play(video);
            playRandomVideos.played.push(video.id);
        }
        playRandomVideos();
    }});
})();
playedRandomVideos.played = [];