3 个条件 + 随机顺序 + 分页(代码点火器 + MySQL)


3 Conditions + Random Order + Pagination (Code Igniter + MySQL)

我有一个棘手的问题要解决,让我看看你能不能帮我...

我正在使用CodeIgniter + MySQL开发一个服务目录,由于我的客户的业务规则,有3种计划类型。(铂金,黄金和白银 - 按从好到差的顺序(

目录中有一张表格,上面有广告的公司,每个公司都可能支付这 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();

到目前为止,一切顺利。问题是,有这么多结果,我必须将它们分页:)我该怎么做,请记住:

  • 计划优先级必须通过页面相同
  • 结果必须在计划"块"内随机
  • 但是分页不能通过页面重复记录或遗漏一些结果

我必须实现这样的事情(例如,每页分页 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 页中没有重复或遗漏的结果。

有人可以帮助我,拜托。这是一个挑战;)谢谢,阿德里亚诺。

既然结果的随机化必须跨会话保留(用于分页(,为什么不存储在PHP而不是MySQL中呢?

在 MySQL 中获取随机查询的初始查询:

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

也许将 ID 存储在 PHP 中:

$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);

当然,如果您选择这样做,请稍后重置会话。