Codeigniter如何在活动记录中执行复杂查询

时间:2018-02-06 19:59:39

标签: mysql codeigniter

如何在不使用RAW的情况下在codeigniter中执行此查询:

SELECT `accounts`.`id`, `accounts`.`username`, `membs_authority`.`authority`, `membs_info`.`created_at`, `membs_info`.`confirmed`, `membs_hashes`.`sha256`, `membs_hashes`.`scrypt`, `membs_hashes`.`x11` 
FROM `accounts` 
INNER JOIN `membs_authority` 
  ON `membs_authority`.`won` = `accounts`.`secret` 
INNER JOIN `membs_info` 
  ON `membs_info`.`id` = `accounts`.`id` 
INNER JOIN `membs_hashes` 
  ON `membs_hashes`.`id` = `accounts`.`id` 
WHERE
  (`membs_info`.`confirmed` = 1
    AND (
       `membs_authority`.`authority` = 1 OR `membs_authority`.`authority` = 9
    )
  ) 
  AND (
    `membs_hashes`.`sha256` >0 OR `membs_hashes`.`scrypt` >0 OR `membs_hashes`.`x11` >0
  )

这里重要的是“WHERE”的结构

1 个答案:

答案 0 :(得分:1)

正如Vickel已经建议你在文档中可以很容易地找到这些信息,但另一方面如果你真的没有线索,如果你看到如何做到这一点可能会有所帮助 - 所以试试以下

$query = $this->db
    ->select('a.id, a.username, ma.authority, mi.created_at, mi.confirmed, mh.sha256, mh.scrypt, mh.x11')
    ->from('accounts a')
    ->join('membs_authority ma', 'ma.won = a.secret','inner')
    ->join('membs_info mi', 'mi.id = a.id','inner')
    ->join('membs_hashes` mh', 'mh.id = a.id','inner')
    ->group_start()
        ->where('mi.confirmed', 1)
        ->group_start()
            ->where('ma.authority', 1)
            ->or_where('ma.authority', 9)
        ->group_end()
    ->group_end()
    ->group_start()
        ->where('mh.sha256 >',0)
        ->or_where('mh.scrypt >', 0)
        ->or_where('mh.x11 >', 0)
    ->group_end()
    ->get();