下面的方法用来构建 SELECT 语句。
$this->db->get()
该方法执行 SELECT 语句并返回查询结果,可以得到一个表的所有数据:
$query = $this->db->get('mytable'); // Produces: SELECT * FROM mytable
第二和第三个参数用于设置 LIMIT 子句:
$query = $this->db->get('mytable', 10, 20);
// Executes: SELECT * FROM mytable LIMIT 20, 10
// (in MySQL. Other databases have slightly different syntax)
你应该已经注意到了,上面的方法的结果都赋值给了一个 $query 变量,通过这个变量,
我们可以得到查询的结果:
$query = $this->db->get('mytable');
foreach ($query->result() as $row)
{
echo $row->title;
}
参考 生成查询结果 页面获取关于生成结果的更多信息。
$this->db->get_compiled_select()
该方法和 $this->db->get() 方法一样编译 SELECT 查询并返回查询的 SQL 语句,
但是,该方法并不执行它。
例子:
$sql = $this->db->get_compiled_select('mytable');
echo $sql;
// Prints string: SELECT * FROM mytable
第二个参数用于设置是否重置查询(默认会重置,和使用 $this->db->get() 方法时一样):
echo $this->db->limit(10,20)->get_compiled_select('mytable', FALSE);
// Prints string: SELECT * FROM mytable LIMIT 20, 10
// (in MySQL. Other databases have slightly different syntax)
echo $this->db->select('title, content, date')->get_compiled_select();
// Prints string: SELECT title, content, date FROM mytable LIMIT 20, 10
上面的例子中,最值得注意的是,第二个查询并没有用到 $this->db->from() 方法,
也没有为查询指定表名参数,但是它生成的 SQL 语句中有 FROM mytable 子句。
这是因为查询并没有被重置(使用 $this->db->get() 方法查询会被执行并被重置,
使用 $this->db->reset_query() 方法直接重置)。
$this->db->get_where()
这个方法基本上和上面的方法一样,但它提供了第二个参数可以让你添加一个 WHERE 子句,
而不是使用 db->where() 方法:
$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
阅读下面的 db->where() 方法获取更多信息。
注解
get_where() 方法的前身为 getwhere(), 已废除
$this->db->select()
该方法用于编写查询语句中的 SELECT 子句:
$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// Executes: SELECT title, content, date FROM mytable
注解
如果你要查询表的所有列,可以不用写这个函数,CodeIgniter 会自动查询所有列(SELECT *)。
$this->db->select() 方法的第二个参数可选,如果设置为 FALSE,CodeIgniter 将不保护你的
表名和字段名,这在当你编写复合查询语句时很有用,不会破坏你编写的语句。
$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE);
$query = $this->db->get('mytable');
$this->db->select_max()
该方法用于编写查询语句中的 SELECT MAX(field) 部分,你可以使用第二个参数(可选)重命名结果字段。
$this->db->select_max('age');
$query = $this->db->get('members'); // Produces: SELECT MAX(age) as age FROM members
$this->db->select_max('age', 'member_age');
$query = $this->db->get('members'); // Produces: SELECT MAX(age) as member_age FROM members
$this->db->select_min()
该方法用于编写查询语句中的 SELECT MIN(field) 部分,和 select_max() 方法一样,
你可以使用第二个参数(可选)重命名结果字段。
$this->db->select_min('age');
$query = $this->db->get('members'); // Produces: SELECT MIN(age) as age FROM members
$this->db->select_avg()
该方法用于编写查询语句中的 SELECT AVG(field) 部分,和 select_max() 方法一样,
你可以使用第二个参数(可选)重命名结果字段。
$this->db->select_avg('age');
$query = $this->db->get('members'); // Produces: SELECT AVG(age) as age FROM members
$this->db->select_sum()
该方法用于编写查询语句中的 SELECT SUM(field) 部分,和 select_max() 方法一样,
你可以使用第二个参数(可选)重命名结果字段。
$this->db->select_sum('age');
$query = $this->db->get('members'); // Produces: SELECT SUM(age) as age FROM members
$this->db->from()
该方法用于编写查询语句中的 FROM 子句:
$this->db->select('title, content, date');
$this->db->from('mytable');
$query = $this->db->get(); // Produces: SELECT title, content, date FROM mytable
注解
正如前面所说,查询中的 FROM 部分可以在方法 $this->db->get() 中指定,所以,你可以
选择任意一种你喜欢的方式。
$this->db->join()
该方法用于编写查询语句中的 JOIN 子句:
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();
// Produces:
// SELECT * FROM blogs JOIN comments ON comments.id = blogs.id
如果你的查询中有多个连接,你可以多次调用这个方法。
你可以传入第三个参数指定连接的类型,有这样几种选择:left,right,outer,inner,left
outer 和 right outer 。
$this->db->join('comments', 'comments.id = blogs.id', 'left');
// Produces: LEFT JOIN comments ON comments.id = blogs.id