2013-09-28 78 views
0

我有一個棘手的問題來解決,讓我看看你能不能幫我...3條件+隨機順序+分頁(代碼點火器+ MySQL的)

即時通訊開發使用笨+ MySQL和一個服務目錄,由於我的客戶的業務規則,3種計劃類型。 (白金,黃金和白銀 - 按此順序從最好到最差)

有一個表與目錄中的公司tha advertise,並且他們每個人可能都支付這3個計劃之一。

的問題是:

我必須提出以下這個規則的結果: 1.白金至上,比金,比銀 2.結果中的每一個的範圍必須是隨機本身

Platinum 2 
Platinum 1 
Platinum 3 
Gold 3 
Gold 1 
GOld 2 
Silver 2 
Silver 3 
Silver 1 

刷新和我得到:

Platinum 1 
Platinum 3 
Platinum 2 
Gold 2 
Gold 1 
GOld 3 
Silver 2 
Silver 1 
Silver 3 

在PHP中的查詢是這樣的:

// after a Select and several joins to filter city, provinces, service types 
// i do this to randomize , order and group 

     $query = $this->db->order_by('plan.level', 'desc'); 
     $query = $this->db->order_by('busines.id', 'random'); 

     $query = $this->db->group_by('business.id'); 
       return $query->result_array(); 

到目前爲止,迄今爲止這麼好。 問題是,有這麼多的結果,我必須進行分頁他們:) 我怎樣才能記住這樣做牢記這:

  • 該計劃的優先級必須是相同的通過網頁
  • 結果必須計劃「塊」
  • 而是通過網頁或omiss一些成果

我要實現這樣的事情(例如用4每頁分頁)

分頁CANT重複記錄中是隨機的
Page I: 
Platinum 1 
Platinum 4 
Platinum 5 
Platinum 3 

Page II: 
Platinum 2 
Gold 5 
Gold 3 
Gold 1 

Page III: 
Gold 4 
Gold 2 
Silver 2 
Silver 5 

Page IV: 
Silver 1 
Silver 3 
Silver 4 

在本示例中,刷新,隨機更改記錄的位置在頁面內部,在這4個頁面中沒有重複或遺漏的結果。

有人可以幫助我。 它是一個挑戰;)謝謝,阿德里亞諾。

回答

0

由於結果的隨機化必須在會話中保存(對於分頁),爲什麼不用PHP存儲而不是MySQL?

初始查詢來獲取隨機查詢在MySQL:

$this->db->select('id'); 
// The rest of your ActiveRecord query here, randomized 

也許存儲在PHP中的ID:

$this->session->set_userdata('random_query', $array_of_random_ids); 

然後每頁查詢它

$array_of_random_ids = $this->session->userdata('random_query'); 
$this->db->from('business'); 
$this->db->where_in('id', array_slice($array_of_random_ids, $page_number * $length, $views_per_page); 
$this->db->limit($views_per_page, $page_number * $length); 

而且當然以後重新設置會話,如果你選擇這樣做的話。

+0

感謝努力的人,但我們正在談論很多很多的記錄。它不適合會議。並考慮到性能問題,你的角度不能幫助我。但是,非常感謝您的快速回答。讓我們繼續嘗試。如果您有其他想法,請告訴我。最好的祝福。 –

+0

@ Adrianod'AvilaBorges ID本身不應該太多,我們在這裏談論多少?請記住,過早優化是所有邪惡的根源。 – xiankai

+0

5000結果在啓用了所有省份和服務類型的情況下。標準篩選器着陸從啓用所有結果開始。 –