2016/02/25

Laravel order random faster solution

source: MySQL select 10 random rows from 600K rows fast

using Eloquent's Query Scope

add method to model
public function scopeRandom($query){
 //source: http://stackoverflow.com/a/4329447

 $table = $this->getTable();
 $key = $this->getKeyName();

 $subQuery = sprintf(
     "(SELECT CEIL(RAND() * (SELECT MAX(`%s`) FROM `%s`)) AS id) as random", 
     $key, 
     $table
    );

 return $query->join(DB::raw($subQuery), function($join) use($table, $key){
  $join->on( $table.'.'.$key, '>=', 'random.'.$key );
 });
}

Using:
Post::random()->where(...)->get();

[作品] FB牆



(其實這是把去年(2015)寫過的東西重構後再拿出來用的...)

這個作品的起源來自於前年興起的"表特牆"
也就是把一堆正妹的照片滿滿的放在網頁上

因為有個學弟在寫這個東西
無意間喵了一下覺得還蠻有趣的(不是因為正妹,是因為FB的API)
就研究了一下FB的API
然後寫了一個抓"表特系列"的照片牆

後續因為FB新增文章可以有多個圖片的功能
程式顯示的圖片都失效了然後荒廢中

最近有點時間就全部重寫
把原本單一肥大的class分拆

引入laravel framework
(原始是純PHP,加上自製的View, DB之類的Model)

原始碼在Github,有興趣可以Clone回去玩玩