我有一个表,其中有一个pay_mode字段,其中SUBSCRIPTION,ONETIME,FREE是条目,所以我想通过随机顺序获取SUBSCRIPTION,ONETIME上的记录,而免费列表按降序排列(NOT BY RANDOM)日期。
$this->db->select("p.*", FALSE);
$this->db->from($this->table_classified." p");
$this->db->where('p.is_active', '1');
$this->db->where('p.is_deleted', 'NO');
$this->db->order_by("(CASE `pay_mode`
WHEN 'RECURRING' THEN 3
WHEN 'ONETIME' THEN 2
WHEN 'FREE' THEN 1
END)",'DESC');
$this->db->order_by('pay_mode', 'RANDOM');
$query = $this->db->get();
请找到架构here
答案 0 :(得分:1)
您可以在codeigniter上编写自定义查询,然后您可以随机获取重复和一次性,然后使用union并按desc顺序获取免费列表。
$query = "(SELECT *
FROM (SELECT nc_classified.*,
nc_classified_category.title_zh AS cat_title_zh,
nc_classified_category.title AS cat_title
FROM `nc_classified`
LEFT JOIN `nc_classified_category`
ON nc_classified.cat_id = nc_classified_category.id
WHERE ( $where )
AND `pay_mode` IN( 'RECURRING', 'ONETIME' )
ORDER BY ( CASE `pay_mode`
WHEN 'RECURRING' THEN 1
WHEN 'ONETIME' THEN 2
end ),
Rand()) a)
UNION
(SELECT *
FROM (SELECT nc_classified.*,
nc_classified_category.title_zh AS cat_title_zh,
nc_classified_category.title AS cat_title
FROM `nc_classified`
LEFT JOIN `nc_classified_category`
ON nc_classified.cat_id = nc_classified_category.id
WHERE ( $where )
AND `pay_mode` IN( 'FREE' )
ORDER BY id DESC) a) ";
$cQuery = $this->db->query($query);
答案 1 :(得分:0)
使用此代码并按asc,desc或RANDOM设置订单
$this->db->select("p.*, (CASE `pay_mode` WHEN 'RECURRING' THEN 3 WHEN 'ONETIME' THEN 2 WHEN 'FREE' THEN 1 END) as pay_mode_no");</p>
$this->db->from('classified as p');
$this->db->where('p.is_active', '1');
$this->db->where('p.is_deleted', 'NO');
$this->db->order_by('pay_mode_no', 'ASC');
$this->db->get()->result();
答案 2 :(得分:0)
您的pay_mode
列是枚举,按pay_mode
排序将立即生效:
$this->db->order_by('pay_mode', 'DESC'); // RECURRING -> ONETIME -> FREE
$this->db->order_by('pay_mode', 'ASC'); // FREE -> ONETIME -> RECURRING
对于随机化部分,我建议您在PHP代码中执行此操作(请参阅示例shuffle
)。