我有一个棘手的问题要解决,让我看看你是否可以帮助我......
我正在使用CodeIgniter + MySQL开发服务目录,并且由于我的客户的业务规则,还有3个计划类型。 (白金,黄金和白银 - 按此顺序从最好到更差)
有一个表格可以在目录中刊登公告,并且每个公司都可以支付这3个计划中的一个。
问题是:
我必须按照以下规则提交结果: 铂金首先是金,而不是金 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();
直到现在,到目前为止,这么好。
问题是,如此多的结果,我必须将它们分页:)
我怎么能记住:
我必须达到这样的目标(例如每页4页)
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 :(得分: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);
当然会在以后重置会话,如果这是您选择的方式。