<p>Laravel自带的随机数据获取方法</p><p>一、使用原生SQL从数据库获取数据</p><p>从Mysql官网可以看到,可以让ORDER BY RAND()和LIMIT一起使用,可以用于从多行结果中选取随机的一部分。</p><p>SELECT * FROM table WHERE name=&quot;&quot; ORDER BY RAND() LIMIT 100;</p><p>那么在laravel中使用原生SQL也很简单,如下所示:</p><p>$info = DB::select(&#39;SELECT * FROM table WHERE name=&quot;&quot; ORDER BY RAND() LIMIT 100&#39;);</p><p>二、使用原始表达式从数据随机获取数据</p><p>我们都知道laravel的原始表达式,我们可以使用DB::raw(&#39;RAND()&#39;)从数据库随机获取数据。同时你还可以使用orderByRaw(&#39;RAND()&#39;)从数据库随机获取数据,和DB::raw(&#39;RAND()&#39;)效果一样</p><pre class="brush:php;toolbar:false">$info=self::where(&#39;orders&#39;,&#39;&lt;&gt;&#39;,&#39;&#39;) -&gt;orderBy(DB::raw(&#39;RAND()&#39;)) -&gt;take(5) -&gt;get();</pre><p>三、使用laravel的inRandomOrder方法随机获取数据</p><p>laravel中使inRandomOrder会对数据结果进行随机排序,达到我们随机从数据库获取数据的效果:</p><pre class="brush:php;toolbar:false">$info=DB::table(&#39;users&#39;) -&gt;inRandomOrder() -&gt;take(5) -&gt;get();</pre><p>上面三种对于小数据没有问题,对于大数据,性能就不行了</p><p>最高效的查询方法</p><pre class="brush:php;toolbar:false">$data=Hexiao::when($live,function($query){ $query-&gt;join( DB::raw(&quot;(SELECTROUND(RAND()*((SELECTMAX(id)FROM`hexiao`)-(SELECTMIN(id)FROM`hexiao`))+(SELECTMIN(id)FROM`hexiao`))ASxid)ast2&quot;), &#39;hexiao.id&#39;,&#39;&gt;=&#39;,&#39;t2.xid&#39; ); }); -&gt;take(3)-&gt;get();</pre>
返回顶部 留言