blob: 3c72218cd1411a6b3c9c6f0aeacc9d8a996a7a7e [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001###################
Jamie Rumbelow7efad202012-02-19 12:37:00 +00002Query Builder Class
Derek Jones8ede1a22011-10-05 13:34:52 -05003###################
4
David Wosnitzad31a4e62014-12-12 16:35:35 +01005CodeIgniter gives you access to a Query Builder class. This pattern
6allows information to be retrieved, inserted, and updated in your
Jamie Rumbelow7efad202012-02-19 12:37:00 +00007database with minimal scripting. In some cases only one or two lines
8of code are necessary to perform a database action.
Derek Jones8ede1a22011-10-05 13:34:52 -05009CodeIgniter does not require that each database table be its own class
10file. It instead provides a more simplified interface.
11
Jamie Rumbelow7efad202012-02-19 12:37:00 +000012Beyond simplicity, a major benefit to using the Query Builder features
Derek Jones8ede1a22011-10-05 13:34:52 -050013is that it allows you to create database independent applications, since
14the query syntax is generated by each database adapter. It also allows
15for safer queries, since the values are escaped automatically by the
16system.
17
18.. note:: If you intend to write your own queries you can disable this
19 class in your database config file, allowing the core database library
20 and adapter to utilize fewer resources.
21
James L Parry42a7df62014-11-25 12:06:49 -080022.. contents::
23 :local:
24 :depth: 1
Derek Jones8ede1a22011-10-05 13:34:52 -050025
26**************
27Selecting Data
28**************
29
30The following functions allow you to build SQL **SELECT** statements.
31
James L Parry141288d2014-12-06 01:45:12 -080032**$this->db->get()**
Derek Jones8ede1a22011-10-05 13:34:52 -050033
34Runs the selection query and returns the result. Can be used by itself
35to retrieve all records from a table::
36
37 $query = $this->db->get('mytable'); // Produces: SELECT * FROM mytable
38
39The second and third parameters enable you to set a limit and offset
40clause::
41
42 $query = $this->db->get('mytable', 10, 20);
Andrey Andreev4fce5c42014-12-11 17:11:48 +020043
44 // Executes: SELECT * FROM mytable LIMIT 20, 10
45 // (in MySQL. Other databases have slightly different syntax)
Derek Jones8ede1a22011-10-05 13:34:52 -050046
47You'll notice that the above function is assigned to a variable named
48$query, which can be used to show the results::
49
50 $query = $this->db->get('mytable');
WanWizard7219c072011-12-28 14:09:05 +010051
Derek Jones8ede1a22011-10-05 13:34:52 -050052 foreach ($query->result() as $row)
53 {
54 echo $row->title;
55 }
56
57Please visit the :doc:`result functions <results>` page for a full
58discussion regarding result generation.
59
James L Parry141288d2014-12-06 01:45:12 -080060**$this->db->get_compiled_select()**
James L Parry42a7df62014-11-25 12:06:49 -080061
62Compiles the selection query just like **$this->db->get()** but does not *run*
Kyle Farris48d8fb62011-10-14 17:59:49 -030063the query. This method simply returns the SQL query as a string.
64
65Example::
66
67 $sql = $this->db->get_compiled_select('mytable');
68 echo $sql;
WanWizard7219c072011-12-28 14:09:05 +010069
Andrey Andreev4fce5c42014-12-11 17:11:48 +020070 // Prints string: SELECT * FROM mytable
WanWizard7219c072011-12-28 14:09:05 +010071
Jamie Rumbelow7efad202012-02-19 12:37:00 +000072The second parameter enables you to set whether or not the query builder query
GDmac01e9fb12013-11-09 08:01:52 +010073will be reset (by default it will be reset, just like when using `$this->db->get()`)::
Kyle Farris48d8fb62011-10-14 17:59:49 -030074
75 echo $this->db->limit(10,20)->get_compiled_select('mytable', FALSE);
Andrey Andreev4fce5c42014-12-11 17:11:48 +020076
77 // Prints string: SELECT * FROM mytable LIMIT 20, 10
Kyle Farris48d8fb62011-10-14 17:59:49 -030078 // (in MySQL. Other databases have slightly different syntax)
WanWizard7219c072011-12-28 14:09:05 +010079
Kyle Farris48d8fb62011-10-14 17:59:49 -030080 echo $this->db->select('title, content, date')->get_compiled_select();
81
Andrey Andreev4fce5c42014-12-11 17:11:48 +020082 // Prints string: SELECT title, content, date FROM mytable LIMIT 20, 10
WanWizard7219c072011-12-28 14:09:05 +010083
84The key thing to notice in the above example is that the second query did not
James L Parry42a7df62014-11-25 12:06:49 -080085utilize **$this->db->from()** and did not pass a table name into the first
WanWizard7219c072011-12-28 14:09:05 +010086parameter. The reason for this outcome is because the query has not been
James L Parry42a7df62014-11-25 12:06:49 -080087executed using **$this->db->get()** which resets values or reset directly
88using **$this->db->reset_query()**.
Kyle Farris48d8fb62011-10-14 17:59:49 -030089
James L Parry141288d2014-12-06 01:45:12 -080090**$this->db->get_where()**
Derek Jones8ede1a22011-10-05 13:34:52 -050091
92Identical to the above function except that it permits you to add a
93"where" clause in the second parameter, instead of using the db->where()
94function::
95
96 $query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
97
98Please read the about the where function below for more information.
99
Greg Akerffd24a42011-12-25 22:27:59 -0600100.. note:: get_where() was formerly known as getwhere(), which has been removed
Derek Jones8ede1a22011-10-05 13:34:52 -0500101
James L Parry141288d2014-12-06 01:45:12 -0800102**$this->db->select()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500103
104Permits you to write the SELECT portion of your query::
105
106 $this->db->select('title, content, date');
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200107 $query = $this->db->get('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500108
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200109 // Executes: SELECT title, content, date FROM mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500110
111.. note:: If you are selecting all (\*) from a table you do not need to
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200112 use this function. When omitted, CodeIgniter assumes that you wish
David Wosnitzad31a4e62014-12-12 16:35:35 +0100113 to select all fields and automatically adds 'SELECT \*'.
Derek Jones8ede1a22011-10-05 13:34:52 -0500114
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200115``$this->db->select()`` accepts an optional second parameter. If you set it
David Wosnitzad31a4e62014-12-12 16:35:35 +0100116to FALSE, CodeIgniter will not try to protect your field or table names.
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200117This is useful if you need a compound select statement where automatic
118escaping of fields may break them.
Derek Jones8ede1a22011-10-05 13:34:52 -0500119
120::
121
Andrey Andreev954c4aa2017-07-21 11:51:37 +0300122 $this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4) AS amount_paid', FALSE);
Derek Jones8ede1a22011-10-05 13:34:52 -0500123 $query = $this->db->get('mytable');
124
James L Parry141288d2014-12-06 01:45:12 -0800125**$this->db->select_max()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500126
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200127Writes a ``SELECT MAX(field)`` portion for your query. You can optionally
Derek Jones8ede1a22011-10-05 13:34:52 -0500128include a second parameter to rename the resulting field.
129
130::
131
132 $this->db->select_max('age');
133 $query = $this->db->get('members'); // Produces: SELECT MAX(age) as age FROM members
WanWizard7219c072011-12-28 14:09:05 +0100134
Derek Jones8ede1a22011-10-05 13:34:52 -0500135 $this->db->select_max('age', 'member_age');
136 $query = $this->db->get('members'); // Produces: SELECT MAX(age) as member_age FROM members
137
138
James L Parry42a7df62014-11-25 12:06:49 -0800139**$this->db->select_min()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500140
141Writes a "SELECT MIN(field)" portion for your query. As with
142select_max(), You can optionally include a second parameter to rename
143the resulting field.
144
145::
146
147 $this->db->select_min('age');
148 $query = $this->db->get('members'); // Produces: SELECT MIN(age) as age FROM members
149
150
James L Parry42a7df62014-11-25 12:06:49 -0800151**$this->db->select_avg()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500152
153Writes a "SELECT AVG(field)" portion for your query. As with
154select_max(), You can optionally include a second parameter to rename
155the resulting field.
156
157::
158
159 $this->db->select_avg('age');
160 $query = $this->db->get('members'); // Produces: SELECT AVG(age) as age FROM members
161
162
James L Parry42a7df62014-11-25 12:06:49 -0800163**$this->db->select_sum()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500164
165Writes a "SELECT SUM(field)" portion for your query. As with
166select_max(), You can optionally include a second parameter to rename
167the resulting field.
168
169::
170
171 $this->db->select_sum('age');
172 $query = $this->db->get('members'); // Produces: SELECT SUM(age) as age FROM members
173
James L Parry141288d2014-12-06 01:45:12 -0800174**$this->db->from()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500175
176Permits you to write the FROM portion of your query::
177
178 $this->db->select('title, content, date');
179 $this->db->from('mytable');
180 $query = $this->db->get(); // Produces: SELECT title, content, date FROM mytable
181
182.. note:: As shown earlier, the FROM portion of your query can be specified
183 in the $this->db->get() function, so use whichever method you prefer.
184
James L Parry141288d2014-12-06 01:45:12 -0800185**$this->db->join()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500186
187Permits you to write the JOIN portion of your query::
188
189 $this->db->select('*');
190 $this->db->from('blogs');
191 $this->db->join('comments', 'comments.id = blogs.id');
192 $query = $this->db->get();
WanWizard7219c072011-12-28 14:09:05 +0100193
Derek Jones8ede1a22011-10-05 13:34:52 -0500194 // Produces:
kenjisc35d2c92011-10-26 17:09:17 +0900195 // SELECT * FROM blogs JOIN comments ON comments.id = blogs.id
Derek Jones8ede1a22011-10-05 13:34:52 -0500196
197Multiple function calls can be made if you need several joins in one
198query.
199
200If you need a specific type of JOIN you can specify it via the third
201parameter of the function. Options are: left, right, outer, inner, left
202outer, and right outer.
203
204::
205
206 $this->db->join('comments', 'comments.id = blogs.id', 'left');
207 // Produces: LEFT JOIN comments ON comments.id = blogs.id
208
James L Parry42a7df62014-11-25 12:06:49 -0800209*************************
210Looking for Specific Data
211*************************
212
James L Parry141288d2014-12-06 01:45:12 -0800213**$this->db->where()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500214
215This function enables you to set **WHERE** clauses using one of four
216methods:
217
218.. note:: All values passed to this function are escaped automatically,
219 producing safer queries.
220
221#. **Simple key/value method:**
222
223 ::
224
WanWizard7219c072011-12-28 14:09:05 +0100225 $this->db->where('name', $name); // Produces: WHERE name = 'Joe'
Derek Jones8ede1a22011-10-05 13:34:52 -0500226
227 Notice that the equal sign is added for you.
228
229 If you use multiple function calls they will be chained together with
230 AND between them:
231
232 ::
233
234 $this->db->where('name', $name);
235 $this->db->where('title', $title);
236 $this->db->where('status', $status);
WanWizard7219c072011-12-28 14:09:05 +0100237 // WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
Derek Jones8ede1a22011-10-05 13:34:52 -0500238
239#. **Custom key/value method:**
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200240
Derek Jones8ede1a22011-10-05 13:34:52 -0500241 You can include an operator in the first parameter in order to
242 control the comparison:
243
244 ::
245
246 $this->db->where('name !=', $name);
WanWizard7219c072011-12-28 14:09:05 +0100247 $this->db->where('id <', $id); // Produces: WHERE name != 'Joe' AND id < 45
Derek Jones8ede1a22011-10-05 13:34:52 -0500248
249#. **Associative array method:**
250
251 ::
252
253 $array = array('name' => $name, 'title' => $title, 'status' => $status);
254 $this->db->where($array);
WanWizard7219c072011-12-28 14:09:05 +0100255 // Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
Derek Jones8ede1a22011-10-05 13:34:52 -0500256
257 You can include your own operators using this method as well:
258
259 ::
260
261 $array = array('name !=' => $name, 'id <' => $id, 'date >' => $date);
262 $this->db->where($array);
263
264#. **Custom string:**
265 You can write your own clauses manually::
266
267 $where = "name='Joe' AND status='boss' OR status='active'";
268 $this->db->where($where);
269
270
Andrey Andreev4fce5c42014-12-11 17:11:48 +0200271``$this->db->where()`` accepts an optional third parameter. If you set it to
272FALSE, CodeIgniter will not try to protect your field or table names.
Derek Jones8ede1a22011-10-05 13:34:52 -0500273
274::
275
276 $this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
277
James L Parry42a7df62014-11-25 12:06:49 -0800278**$this->db->or_where()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500279
280This function is identical to the one above, except that multiple
281instances are joined by OR::
282
283 $this->db->where('name !=', $name);
284 $this->db->or_where('id >', $id); // Produces: WHERE name != 'Joe' OR id > 50
285
286.. note:: or_where() was formerly known as orwhere(), which has been
287 removed.
288
James L Parry141288d2014-12-06 01:45:12 -0800289**$this->db->where_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500290
291Generates a WHERE field IN ('item', 'item') SQL query joined with AND if
292appropriate
293
294::
295
296 $names = array('Frank', 'Todd', 'James');
297 $this->db->where_in('username', $names);
298 // Produces: WHERE username IN ('Frank', 'Todd', 'James')
299
300
James L Parry42a7df62014-11-25 12:06:49 -0800301**$this->db->or_where_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500302
303Generates a WHERE field IN ('item', 'item') SQL query joined with OR if
304appropriate
305
306::
307
308 $names = array('Frank', 'Todd', 'James');
309 $this->db->or_where_in('username', $names);
310 // Produces: OR username IN ('Frank', 'Todd', 'James')
311
James L Parry141288d2014-12-06 01:45:12 -0800312**$this->db->where_not_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500313
314Generates a WHERE field NOT IN ('item', 'item') SQL query joined with
315AND if appropriate
316
317::
318
319 $names = array('Frank', 'Todd', 'James');
320 $this->db->where_not_in('username', $names);
321 // Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')
322
323
James L Parry42a7df62014-11-25 12:06:49 -0800324**$this->db->or_where_not_in()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500325
326Generates a WHERE field NOT IN ('item', 'item') SQL query joined with OR
327if appropriate
328
329::
330
331 $names = array('Frank', 'Todd', 'James');
332 $this->db->or_where_not_in('username', $names);
333 // Produces: OR username NOT IN ('Frank', 'Todd', 'James')
334
James L Parry42a7df62014-11-25 12:06:49 -0800335************************
336Looking for Similar Data
337************************
Derek Jones8ede1a22011-10-05 13:34:52 -0500338
James L Parry141288d2014-12-06 01:45:12 -0800339**$this->db->like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500340
Andrey Andreev41738232012-11-30 00:13:17 +0200341This method enables you to generate **LIKE** clauses, useful for doing
Derek Jones8ede1a22011-10-05 13:34:52 -0500342searches.
343
Andrey Andreev41738232012-11-30 00:13:17 +0200344.. note:: All values passed to this method are escaped automatically.
Derek Jones8ede1a22011-10-05 13:34:52 -0500345
346#. **Simple key/value method:**
347
348 ::
349
Andrey Andreev41738232012-11-30 00:13:17 +0200350 $this->db->like('title', 'match');
351 // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500352
Andrey Andreev41738232012-11-30 00:13:17 +0200353 If you use multiple method calls they will be chained together with
Derek Jones8ede1a22011-10-05 13:34:52 -0500354 AND between them::
355
356 $this->db->like('title', 'match');
357 $this->db->like('body', 'match');
Andrey Andreev41738232012-11-30 00:13:17 +0200358 // WHERE `title` LIKE '%match%' ESCAPE '!' AND `body` LIKE '%match% ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500359
360 If you want to control where the wildcard (%) is placed, you can use
Andrey Andreevc4501832018-09-05 16:54:42 +0300361 an optional third argument. Your options are 'before', 'after', 'none' and
Derek Jones8ede1a22011-10-05 13:34:52 -0500362 'both' (which is the default).
363
364 ::
365
Andrey Andreev41738232012-11-30 00:13:17 +0200366 $this->db->like('title', 'match', 'before'); // Produces: WHERE `title` LIKE '%match' ESCAPE '!'
367 $this->db->like('title', 'match', 'after'); // Produces: WHERE `title` LIKE 'match%' ESCAPE '!'
Andrey Andreevc4501832018-09-05 16:54:42 +0300368 $this->db->like('title', 'match', 'none'); // Produces: WHERE `title` LIKE 'match' ESCAPE '!'
Andrey Andreev41738232012-11-30 00:13:17 +0200369 $this->db->like('title', 'match', 'both'); // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500370
371#. **Associative array method:**
372
373 ::
374
375 $array = array('title' => $match, 'page1' => $match, 'page2' => $match);
376 $this->db->like($array);
Andrey Andreev41738232012-11-30 00:13:17 +0200377 // WHERE `title` LIKE '%match%' ESCAPE '!' AND `page1` LIKE '%match%' ESCAPE '!' AND `page2` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500378
379
James L Parry42a7df62014-11-25 12:06:49 -0800380**$this->db->or_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500381
Andrey Andreev41738232012-11-30 00:13:17 +0200382This method is identical to the one above, except that multiple
Derek Jones8ede1a22011-10-05 13:34:52 -0500383instances are joined by OR::
384
385 $this->db->like('title', 'match'); $this->db->or_like('body', $match);
Andrey Andreev41738232012-11-30 00:13:17 +0200386 // WHERE `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500387
Andrey Andreev41738232012-11-30 00:13:17 +0200388.. note:: ``or_like()`` was formerly known as ``orlike()``, which has been removed.
Derek Jones8ede1a22011-10-05 13:34:52 -0500389
James L Parry42a7df62014-11-25 12:06:49 -0800390**$this->db->not_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500391
Andrey Andreev41738232012-11-30 00:13:17 +0200392This method is identical to ``like()``, except that it generates
393NOT LIKE statements::
Derek Jones8ede1a22011-10-05 13:34:52 -0500394
Andrey Andreev41738232012-11-30 00:13:17 +0200395 $this->db->not_like('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500396
James L Parry42a7df62014-11-25 12:06:49 -0800397**$this->db->or_not_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500398
Andrey Andreev41738232012-11-30 00:13:17 +0200399This method is identical to ``not_like()``, except that multiple
Derek Jones8ede1a22011-10-05 13:34:52 -0500400instances are joined by OR::
401
402 $this->db->like('title', 'match');
403 $this->db->or_not_like('body', 'match');
Andrey Andreev41738232012-11-30 00:13:17 +0200404 // WHERE `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500405
James L Parry141288d2014-12-06 01:45:12 -0800406**$this->db->group_by()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500407
408Permits you to write the GROUP BY portion of your query::
409
410 $this->db->group_by("title"); // Produces: GROUP BY title
411
412You can also pass an array of multiple values as well::
413
414 $this->db->group_by(array("title", "date")); // Produces: GROUP BY title, date
415
416.. note:: group_by() was formerly known as groupby(), which has been
417 removed.
418
James L Parry141288d2014-12-06 01:45:12 -0800419**$this->db->distinct()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500420
421Adds the "DISTINCT" keyword to a query
422
423::
424
425 $this->db->distinct();
426 $this->db->get('table'); // Produces: SELECT DISTINCT * FROM table
427
James L Parry141288d2014-12-06 01:45:12 -0800428**$this->db->having()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500429
430Permits you to write the HAVING portion of your query. There are 2
431possible syntaxes, 1 argument or 2::
432
433 $this->db->having('user_id = 45'); // Produces: HAVING user_id = 45
WanWizard7219c072011-12-28 14:09:05 +0100434 $this->db->having('user_id', 45); // Produces: HAVING user_id = 45
Derek Jones8ede1a22011-10-05 13:34:52 -0500435
436You can also pass an array of multiple values as well::
437
438 $this->db->having(array('title =' => 'My Title', 'id <' => $id));
439 // Produces: HAVING title = 'My Title', id < 45
440
441
442If you are using a database that CodeIgniter escapes queries for, you
443can prevent escaping content by passing an optional third argument, and
444setting it to FALSE.
445
446::
447
448 $this->db->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL
449 $this->db->having('user_id', 45, FALSE); // Produces: HAVING user_id = 45
450
451
James L Parry42a7df62014-11-25 12:06:49 -0800452**$this->db->or_having()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500453
454Identical to having(), only separates multiple clauses with "OR".
455
James L Parry42a7df62014-11-25 12:06:49 -0800456****************
457Ordering results
458****************
459
James L Parry141288d2014-12-06 01:45:12 -0800460**$this->db->order_by()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500461
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200462Lets you set an ORDER BY clause.
463
464The first parameter contains the name of the column you would like to order by.
465
466The second parameter lets you set the direction of the result.
467Options are **ASC**, **DESC** AND **RANDOM**.
Derek Jones8ede1a22011-10-05 13:34:52 -0500468
469::
470
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200471 $this->db->order_by('title', 'DESC');
472 // Produces: ORDER BY `title` DESC
Derek Jones8ede1a22011-10-05 13:34:52 -0500473
474You can also pass your own string in the first parameter::
475
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200476 $this->db->order_by('title DESC, name ASC');
477 // Produces: ORDER BY `title` DESC, `name` ASC
Derek Jones8ede1a22011-10-05 13:34:52 -0500478
479Or multiple function calls can be made if you need multiple fields.
480
481::
482
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200483 $this->db->order_by('title', 'DESC');
484 $this->db->order_by('name', 'ASC');
485 // Produces: ORDER BY `title` DESC, `name` ASC
Derek Jones8ede1a22011-10-05 13:34:52 -0500486
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200487If you choose the **RANDOM** direction option, then the first parameters will
488be ignored, unless you specify a numeric seed value.
489
490::
491
492 $this->db->order_by('title', 'RANDOM');
493 // Produces: ORDER BY RAND()
494
495 $this->db->order_by(42, 'RANDOM');
496 // Produces: ORDER BY RAND(42)
Derek Jones8ede1a22011-10-05 13:34:52 -0500497
498.. note:: order_by() was formerly known as orderby(), which has been
499 removed.
500
Andrey Andreev0dfb62f2012-10-30 11:37:15 +0200501.. note:: Random ordering is not currently supported in Oracle and
502 will default to ASC instead.
Derek Jones8ede1a22011-10-05 13:34:52 -0500503
James L Parry42a7df62014-11-25 12:06:49 -0800504****************************
505Limiting or Counting Results
506****************************
507
James L Parry141288d2014-12-06 01:45:12 -0800508**$this->db->limit()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500509
510Lets you limit the number of rows you would like returned by the query::
511
512 $this->db->limit(10); // Produces: LIMIT 10
513
514The second parameter lets you set a result offset.
515
516::
517
518 $this->db->limit(10, 20); // Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
519
James L Parry141288d2014-12-06 01:45:12 -0800520**$this->db->count_all_results()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500521
522Permits you to determine the number of rows in a particular Active
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000523Record query. Queries will accept Query Builder restrictors such as
Andrey Andreevff806f92015-03-16 17:05:25 +0200524``where()``, ``or_where()``, ``like()``, ``or_like()``, etc. Example::
Derek Jones8ede1a22011-10-05 13:34:52 -0500525
526 echo $this->db->count_all_results('my_table'); // Produces an integer, like 25
527 $this->db->like('title', 'match');
528 $this->db->from('my_table');
WanWizard7219c072011-12-28 14:09:05 +0100529 echo $this->db->count_all_results(); // Produces an integer, like 17
Derek Jones8ede1a22011-10-05 13:34:52 -0500530
Andrey Andreevff806f92015-03-16 17:05:25 +0200531However, this method also resets any field values that you may have passed
532to ``select()``. If you need to keep them, you can pass ``FALSE`` as the
533second parameter::
yaoshanliang2f164052015-03-16 16:48:15 +0800534
Andrey Andreevff806f92015-03-16 17:05:25 +0200535 echo $this->db->count_all_results('my_table', FALSE);
yaoshanliang2f164052015-03-16 16:48:15 +0800536
James L Parry141288d2014-12-06 01:45:12 -0800537**$this->db->count_all()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500538
539Permits you to determine the number of rows in a particular table.
540Submit the table name in the first parameter. Example::
541
542 echo $this->db->count_all('my_table'); // Produces an integer, like 25
543
544**************
WanWizard7219c072011-12-28 14:09:05 +0100545Query grouping
546**************
547
548Query grouping allows you to create groups of WHERE clauses by enclosing them in parentheses. This will allow
Timothy Warrene464b392012-03-13 14:09:31 -0400549you to create queries with complex WHERE clauses. Nested groups are supported. Example::
WanWizard7219c072011-12-28 14:09:05 +0100550
551 $this->db->select('*')->from('my_table')
552 ->group_start()
553 ->where('a', 'a')
554 ->or_group_start()
555 ->where('b', 'b')
556 ->where('c', 'c')
557 ->group_end()
558 ->group_end()
559 ->where('d', 'd')
560 ->get();
561
562 // Generates:
563 // SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'
564
565.. note:: groups need to be balanced, make sure every group_start() is matched by a group_end().
566
James L Parry42a7df62014-11-25 12:06:49 -0800567**$this->db->group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100568
569Starts a new group by adding an opening parenthesis to the WHERE clause of the query.
570
James L Parry42a7df62014-11-25 12:06:49 -0800571**$this->db->or_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100572
573Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'OR'.
574
James L Parry42a7df62014-11-25 12:06:49 -0800575**$this->db->not_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100576
577Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'NOT'.
578
James L Parry42a7df62014-11-25 12:06:49 -0800579**$this->db->or_not_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100580
581Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'OR NOT'.
582
James L Parry42a7df62014-11-25 12:06:49 -0800583**$this->db->group_end()**
WanWizard7219c072011-12-28 14:09:05 +0100584
585Ends the current group by adding an closing parenthesis to the WHERE clause of the query.
586
587**************
Derek Jones8ede1a22011-10-05 13:34:52 -0500588Inserting Data
589**************
590
James L Parry141288d2014-12-06 01:45:12 -0800591**$this->db->insert()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500592
593Generates an insert string based on the data you supply, and runs the
594query. You can either pass an **array** or an **object** to the
595function. Here is an example using an array::
596
597 $data = array(
598 'title' => 'My title',
599 'name' => 'My Name',
600 'date' => 'My date'
601 );
WanWizard7219c072011-12-28 14:09:05 +0100602
Derek Jones8ede1a22011-10-05 13:34:52 -0500603 $this->db->insert('mytable', $data);
604 // Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
605
606The first parameter will contain the table name, the second is an
607associative array of values.
608
609Here is an example using an object::
610
611 /*
612 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200613 public $title = 'My Title';
614 public $content = 'My Content';
615 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500616 }
617 */
WanWizard7219c072011-12-28 14:09:05 +0100618
Derek Jones8ede1a22011-10-05 13:34:52 -0500619 $object = new Myclass;
620 $this->db->insert('mytable', $object);
621 // Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
622
623The first parameter will contain the table name, the second is an
624object.
625
626.. note:: All values are escaped automatically producing safer queries.
627
James L Parry141288d2014-12-06 01:45:12 -0800628**$this->db->get_compiled_insert()**
James L Parry42a7df62014-11-25 12:06:49 -0800629
James L Parry141288d2014-12-06 01:45:12 -0800630Compiles the insertion query just like $this->db->insert() but does not
Kyle Farris48d8fb62011-10-14 17:59:49 -0300631*run* the query. This method simply returns the SQL query as a string.
632
633Example::
634
635 $data = array(
636 'title' => 'My title',
637 'name' => 'My Name',
638 'date' => 'My date'
639 );
WanWizard7219c072011-12-28 14:09:05 +0100640
Kyle Farris48d8fb62011-10-14 17:59:49 -0300641 $sql = $this->db->set($data)->get_compiled_insert('mytable');
642 echo $sql;
WanWizard7219c072011-12-28 14:09:05 +0100643
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300644 // Produces string: INSERT INTO mytable (`title`, `name`, `date`) VALUES ('My title', 'My name', 'My date')
Kyle Farris48d8fb62011-10-14 17:59:49 -0300645
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000646The second parameter enables you to set whether or not the query builder query
James L Parry141288d2014-12-06 01:45:12 -0800647will be reset (by default it will be--just like $this->db->insert())::
WanWizard7219c072011-12-28 14:09:05 +0100648
Kyle Farris48d8fb62011-10-14 17:59:49 -0300649 echo $this->db->set('title', 'My Title')->get_compiled_insert('mytable', FALSE);
WanWizard7219c072011-12-28 14:09:05 +0100650
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300651 // Produces string: INSERT INTO mytable (`title`) VALUES ('My Title')
WanWizard7219c072011-12-28 14:09:05 +0100652
Kyle Farris48d8fb62011-10-14 17:59:49 -0300653 echo $this->db->set('content', 'My Content')->get_compiled_insert();
654
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300655 // Produces string: INSERT INTO mytable (`title`, `content`) VALUES ('My Title', 'My Content')
WanWizard7219c072011-12-28 14:09:05 +0100656
657The key thing to notice in the above example is that the second query did not
Andrey Andreevcdf3a9a2018-03-15 16:58:31 +0200658utilize `$this->db->from()` nor did it pass a table name into the first
WanWizard7219c072011-12-28 14:09:05 +0100659parameter. The reason this worked is because the query has not been executed
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200660using `$this->db->insert()` which resets values or reset directly using
661`$this->db->reset_query()`.
662
663.. note:: This method doesn't work for batched inserts.
Kyle Farris48d8fb62011-10-14 17:59:49 -0300664
James L Parry141288d2014-12-06 01:45:12 -0800665**$this->db->insert_batch()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500666
667Generates an insert string based on the data you supply, and runs the
668query. You can either pass an **array** or an **object** to the
669function. Here is an example using an array::
670
671 $data = array(
672 array(
673 'title' => 'My title',
674 'name' => 'My Name',
675 'date' => 'My date'
676 ),
677 array(
678 'title' => 'Another title',
679 'name' => 'Another Name',
680 'date' => 'Another date'
681 )
682 );
WanWizard7219c072011-12-28 14:09:05 +0100683
Derek Jones8ede1a22011-10-05 13:34:52 -0500684 $this->db->insert_batch('mytable', $data);
685 // Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
686
687The first parameter will contain the table name, the second is an
688associative array of values.
689
690.. note:: All values are escaped automatically producing safer queries.
691
James L Parry42a7df62014-11-25 12:06:49 -0800692*************
693Updating Data
694*************
695
James L Parry141288d2014-12-06 01:45:12 -0800696**$this->db->replace()**
Andrey Andreev04c50f52012-10-24 23:05:25 +0300697
698This method executes a REPLACE statement, which is basically the SQL
699standard for (optional) DELETE + INSERT, using *PRIMARY* and *UNIQUE*
700keys as the determining factor.
701In our case, it will save you from the need to implement complex
702logics with different combinations of ``select()``, ``update()``,
703``delete()`` and ``insert()`` calls.
704
705Example::
706
707 $data = array(
708 'title' => 'My title',
709 'name' => 'My Name',
710 'date' => 'My date'
711 );
712
713 $this->db->replace('table', $data);
714
715 // Executes: REPLACE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
716
717In the above example, if we assume that the *title* field is our primary
718key, then if a row containing 'My title' as the *title* value, that row
719will be deleted with our new row data replacing it.
720
721Usage of the ``set()`` method is also allowed and all fields are
722automatically escaped, just like with ``insert()``.
723
James L Parry141288d2014-12-06 01:45:12 -0800724**$this->db->set()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500725
726This function enables you to set values for inserts or updates.
727
728**It can be used instead of passing a data array directly to the insert
729or update functions:**
730
731::
732
733 $this->db->set('name', $name);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300734 $this->db->insert('mytable'); // Produces: INSERT INTO mytable (`name`) VALUES ('{$name}')
Derek Jones8ede1a22011-10-05 13:34:52 -0500735
736If you use multiple function called they will be assembled properly
737based on whether you are doing an insert or an update::
738
739 $this->db->set('name', $name);
740 $this->db->set('title', $title);
741 $this->db->set('status', $status);
WanWizard7219c072011-12-28 14:09:05 +0100742 $this->db->insert('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500743
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300744**set()** will also accept an optional third parameter (``$escape``), that
Derek Jones8ede1a22011-10-05 13:34:52 -0500745will prevent data from being escaped if set to FALSE. To illustrate the
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300746difference, here is ``set()`` used both with and without the escape
Derek Jones8ede1a22011-10-05 13:34:52 -0500747parameter.
748
749::
750
751 $this->db->set('field', 'field+1', FALSE);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300752 $this->db->where('id', 2);
753 $this->db->update('mytable'); // gives UPDATE mytable SET field = field+1 WHERE id = 2
Derek Jones8ede1a22011-10-05 13:34:52 -0500754
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300755 $this->db->set('field', 'field+1');
756 $this->db->where('id', 2);
757 $this->db->update('mytable'); // gives UPDATE `mytable` SET `field` = 'field+1' WHERE `id` = 2
Derek Jones8ede1a22011-10-05 13:34:52 -0500758
759You can also pass an associative array to this function::
760
761 $array = array(
762 'name' => $name,
763 'title' => $title,
764 'status' => $status
765 );
WanWizard7219c072011-12-28 14:09:05 +0100766
Derek Jones8ede1a22011-10-05 13:34:52 -0500767 $this->db->set($array);
768 $this->db->insert('mytable');
769
770Or an object::
771
772 /*
773 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200774 public $title = 'My Title';
775 public $content = 'My Content';
776 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500777 }
778 */
WanWizard7219c072011-12-28 14:09:05 +0100779
Derek Jones8ede1a22011-10-05 13:34:52 -0500780 $object = new Myclass;
781 $this->db->set($object);
782 $this->db->insert('mytable');
783
James L Parry141288d2014-12-06 01:45:12 -0800784**$this->db->update()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500785
786Generates an update string and runs the query based on the data you
787supply. You can pass an **array** or an **object** to the function. Here
788is an example using an array::
789
790 $data = array(
791 'title' => $title,
792 'name' => $name,
793 'date' => $date
794 );
WanWizard7219c072011-12-28 14:09:05 +0100795
Derek Jones8ede1a22011-10-05 13:34:52 -0500796 $this->db->where('id', $id);
797 $this->db->update('mytable', $data);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300798 // Produces:
799 //
800 // UPDATE mytable
801 // SET title = '{$title}', name = '{$name}', date = '{$date}'
802 // WHERE id = $id
Derek Jones8ede1a22011-10-05 13:34:52 -0500803
804Or you can supply an object::
805
806 /*
807 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200808 public $title = 'My Title';
809 public $content = 'My Content';
810 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500811 }
812 */
WanWizard7219c072011-12-28 14:09:05 +0100813
Derek Jones8ede1a22011-10-05 13:34:52 -0500814 $object = new Myclass;
815 $this->db->where('id', $id);
816 $this->db->update('mytable', $object);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300817 // Produces:
818 //
819 // UPDATE `mytable`
820 // SET `title` = '{$title}', `name` = '{$name}', `date` = '{$date}'
821 // WHERE id = `$id`
Derek Jones8ede1a22011-10-05 13:34:52 -0500822
823.. note:: All values are escaped automatically producing safer queries.
824
825You'll notice the use of the $this->db->where() function, enabling you
826to set the WHERE clause. You can optionally pass this information
827directly into the update function as a string::
828
829 $this->db->update('mytable', $data, "id = 4");
830
831Or as an array::
832
833 $this->db->update('mytable', $data, array('id' => $id));
834
835You may also use the $this->db->set() function described above when
836performing updates.
837
James L Parry141288d2014-12-06 01:45:12 -0800838**$this->db->update_batch()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500839
840Generates an update string based on the data you supply, and runs the query.
841You can either pass an **array** or an **object** to the function.
842Here is an example using an array::
843
844 $data = array(
845 array(
846 'title' => 'My title' ,
847 'name' => 'My Name 2' ,
848 'date' => 'My date 2'
849 ),
850 array(
851 'title' => 'Another title' ,
852 'name' => 'Another Name 2' ,
853 'date' => 'Another date 2'
854 )
855 );
856
WanWizard7219c072011-12-28 14:09:05 +0100857 $this->db->update_batch('mytable', $data, 'title');
Derek Jones8ede1a22011-10-05 13:34:52 -0500858
WanWizard7219c072011-12-28 14:09:05 +0100859 // Produces:
Derek Jones8ede1a22011-10-05 13:34:52 -0500860 // UPDATE `mytable` SET `name` = CASE
861 // WHEN `title` = 'My title' THEN 'My Name 2'
862 // WHEN `title` = 'Another title' THEN 'Another Name 2'
863 // ELSE `name` END,
WanWizard7219c072011-12-28 14:09:05 +0100864 // `date` = CASE
Derek Jones8ede1a22011-10-05 13:34:52 -0500865 // WHEN `title` = 'My title' THEN 'My date 2'
866 // WHEN `title` = 'Another title' THEN 'Another date 2'
867 // ELSE `date` END
868 // WHERE `title` IN ('My title','Another title')
869
870The first parameter will contain the table name, the second is an associative
871array of values, the third parameter is the where key.
872
873.. note:: All values are escaped automatically producing safer queries.
874
Andrey Andreev9f808b02012-10-24 17:38:48 +0300875.. note:: ``affected_rows()`` won't give you proper results with this method,
876 due to the very nature of how it works. Instead, ``update_batch()``
877 returns the number of rows affected.
878
James L Parry141288d2014-12-06 01:45:12 -0800879**$this->db->get_compiled_update()**
Kyle Farris48d8fb62011-10-14 17:59:49 -0300880
881This works exactly the same way as ``$this->db->get_compiled_insert()`` except
882that it produces an UPDATE SQL string instead of an INSERT SQL string.
883
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200884For more information view documentation for `$this->db->get_compiled_insert()`.
Kyle Farris48d8fb62011-10-14 17:59:49 -0300885
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200886.. note:: This method doesn't work for batched updates.
Derek Jones8ede1a22011-10-05 13:34:52 -0500887
888*************
889Deleting Data
890*************
891
James L Parry141288d2014-12-06 01:45:12 -0800892**$this->db->delete()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500893
894Generates a delete SQL string and runs the query.
895
896::
897
898 $this->db->delete('mytable', array('id' => $id)); // Produces: // DELETE FROM mytable // WHERE id = $id
899
900The first parameter is the table name, the second is the where clause.
901You can also use the where() or or_where() functions instead of passing
902the data to the second parameter of the function::
903
904 $this->db->where('id', $id);
905 $this->db->delete('mytable');
WanWizard7219c072011-12-28 14:09:05 +0100906
Derek Jones8ede1a22011-10-05 13:34:52 -0500907 // Produces:
908 // DELETE FROM mytable
909 // WHERE id = $id
910
911
912An array of table names can be passed into delete() if you would like to
913delete data from more than 1 table.
914
915::
916
917 $tables = array('table1', 'table2', 'table3');
918 $this->db->where('id', '5');
919 $this->db->delete($tables);
920
921
922If you want to delete all data from a table, you can use the truncate()
923function, or empty_table().
924
James L Parry141288d2014-12-06 01:45:12 -0800925**$this->db->empty_table()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500926
927Generates a delete SQL string and runs the
928query.::
929
kenjisc35d2c92011-10-26 17:09:17 +0900930 $this->db->empty_table('mytable'); // Produces: DELETE FROM mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500931
James L Parry141288d2014-12-06 01:45:12 -0800932**$this->db->truncate()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500933
934Generates a truncate SQL string and runs the query.
935
936::
937
938 $this->db->from('mytable');
kenjisc35d2c92011-10-26 17:09:17 +0900939 $this->db->truncate();
WanWizard7219c072011-12-28 14:09:05 +0100940
941 // or
942
Derek Jones8ede1a22011-10-05 13:34:52 -0500943 $this->db->truncate('mytable');
WanWizard7219c072011-12-28 14:09:05 +0100944
Derek Jones8ede1a22011-10-05 13:34:52 -0500945 // Produce:
WanWizard7219c072011-12-28 14:09:05 +0100946 // TRUNCATE mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500947
948.. note:: If the TRUNCATE command isn't available, truncate() will
949 execute as "DELETE FROM table".
WanWizard7219c072011-12-28 14:09:05 +0100950
James L Parry141288d2014-12-06 01:45:12 -0800951**$this->db->get_compiled_delete()**
James L Parry42a7df62014-11-25 12:06:49 -0800952
Kyle Farris48d8fb62011-10-14 17:59:49 -0300953This works exactly the same way as ``$this->db->get_compiled_insert()`` except
954that it produces a DELETE SQL string instead of an INSERT SQL string.
955
James L Parry141288d2014-12-06 01:45:12 -0800956For more information view documentation for $this->db->get_compiled_insert().
James L Parry42a7df62014-11-25 12:06:49 -0800957
Derek Jones8ede1a22011-10-05 13:34:52 -0500958***************
959Method Chaining
960***************
961
962Method chaining allows you to simplify your syntax by connecting
963multiple functions. Consider this example::
964
965 $query = $this->db->select('title')
Timothy Warrene464b392012-03-13 14:09:31 -0400966 ->where('id', $id)
967 ->limit(10, 20)
968 ->get('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500969
Derek Jones8ede1a22011-10-05 13:34:52 -0500970.. _ar-caching:
971
972*********************
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000973Query Builder Caching
Derek Jones8ede1a22011-10-05 13:34:52 -0500974*********************
975
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000976While not "true" caching, Query Builder enables you to save (or "cache")
Derek Jones8ede1a22011-10-05 13:34:52 -0500977certain parts of your queries for reuse at a later point in your
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000978script's execution. Normally, when an Query Builder call is completed,
Derek Jones8ede1a22011-10-05 13:34:52 -0500979all stored information is reset for the next call. With caching, you can
980prevent this reset, and reuse information easily.
981
982Cached calls are cumulative. If you make 2 cached select() calls, and
983then 2 uncached select() calls, this will result in 4 select() calls.
984There are three Caching functions available:
985
James L Parry42a7df62014-11-25 12:06:49 -0800986**$this->db->start_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500987
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000988This function must be called to begin caching. All Query Builder queries
Derek Jones8ede1a22011-10-05 13:34:52 -0500989of the correct type (see below for supported queries) are stored for
990later use.
991
James L Parry42a7df62014-11-25 12:06:49 -0800992**$this->db->stop_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500993
994This function can be called to stop caching.
995
James L Parry42a7df62014-11-25 12:06:49 -0800996**$this->db->flush_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500997
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000998This function deletes all items from the Query Builder cache.
Derek Jones8ede1a22011-10-05 13:34:52 -0500999
James L Parry42a7df62014-11-25 12:06:49 -08001000An example of caching
1001---------------------
1002
Derek Jones8ede1a22011-10-05 13:34:52 -05001003Here's a usage example::
1004
1005 $this->db->start_cache();
1006 $this->db->select('field1');
1007 $this->db->stop_cache();
1008 $this->db->get('tablename');
1009 //Generates: SELECT `field1` FROM (`tablename`)
WanWizard7219c072011-12-28 14:09:05 +01001010
Derek Jones8ede1a22011-10-05 13:34:52 -05001011 $this->db->select('field2');
1012 $this->db->get('tablename');
1013 //Generates: SELECT `field1`, `field2` FROM (`tablename`)
WanWizard7219c072011-12-28 14:09:05 +01001014
Derek Jones8ede1a22011-10-05 13:34:52 -05001015 $this->db->flush_cache();
1016 $this->db->select('field2');
1017 $this->db->get('tablename');
1018 //Generates: SELECT `field2` FROM (`tablename`)
1019
1020
1021.. note:: The following statements can be cached: select, from, join,
Andrey Andreev97d51542015-10-19 11:28:11 +03001022 where, like, group_by, having, order_by
Derek Jones8ede1a22011-10-05 13:34:52 -05001023
1024
James L Parry42a7df62014-11-25 12:06:49 -08001025***********************
1026Resetting Query Builder
1027***********************
1028
James L Parry141288d2014-12-06 01:45:12 -08001029**$this->db->reset_query()**
Kyle Farris48d8fb62011-10-14 17:59:49 -03001030
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001031Resetting Query Builder allows you to start fresh with your query without
WanWizard7219c072011-12-28 14:09:05 +01001032executing it first using a method like $this->db->get() or $this->db->insert().
1033Just like the methods that execute a query, this will *not* reset items you've
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001034cached using `Query Builder Caching`_.
Kyle Farris48d8fb62011-10-14 17:59:49 -03001035
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001036This is useful in situations where you are using Query Builder to generate SQL
WanWizard7219c072011-12-28 14:09:05 +01001037(ex. ``$this->db->get_compiled_select()``) but then choose to, for instance,
Kyle Farris48d8fb62011-10-14 17:59:49 -03001038run the query::
1039
1040 // Note that the second parameter of the get_compiled_select method is FALSE
1041 $sql = $this->db->select(array('field1','field2'))
1042 ->where('field3',5)
1043 ->get_compiled_select('mytable', FALSE);
1044
1045 // ...
1046 // Do something crazy with the SQL code... like add it to a cron script for
1047 // later execution or something...
1048 // ...
1049
1050 $data = $this->db->get()->result_array();
1051
1052 // Would execute and return an array of results of the following query:
Andrey Andreev896d3e32014-01-07 17:13:25 +02001053 // SELECT field1, field1 from mytable where field3 = 5;
1054
1055.. note:: Double calls to ``get_compiled_select()`` while you're using the
1056 Query Builder Caching functionality and NOT resetting your queries
1057 will results in the cache being merged twice. That in turn will
James L Parry73817112014-12-08 03:09:29 -08001058 i.e. if you're caching a ``select()`` - select the same field twice.
1059
1060***************
1061Class Reference
1062***************
1063
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001064.. php:class:: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001065
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001066 .. php:method:: reset_query()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001067
1068 :returns: CI_DB_query_builder instance (method chaining)
1069 :rtype: CI_DB_query_builder
1070
1071 Resets the current Query Builder state. Useful when you want
1072 to build a query that can be cancelled under certain conditions.
1073
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001074 .. php:method:: start_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001075
1076 :returns: CI_DB_query_builder instance (method chaining)
1077 :rtype: CI_DB_query_builder
1078
1079 Starts the Query Builder cache.
1080
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001081 .. php:method:: stop_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001082
1083 :returns: CI_DB_query_builder instance (method chaining)
1084 :rtype: CI_DB_query_builder
1085
1086 Stops the Query Builder cache.
1087
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001088 .. php:method:: flush_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001089
1090 :returns: CI_DB_query_builder instance (method chaining)
1091 :rtype: CI_DB_query_builder
1092
1093 Empties the Query Builder cache.
1094
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001095 .. php:method:: set_dbprefix([$prefix = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001096
1097 :param string $prefix: The new prefix to use
1098 :returns: The DB prefix in use
1099 :rtype: string
1100
1101 Sets the database prefix, without having to reconnect.
1102
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001103 .. php:method:: dbprefix([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001104
1105 :param string $table: The table name to prefix
1106 :returns: The prefixed table name
1107 :rtype: string
1108
1109 Prepends a database prefix, if one exists in configuration.
1110
Andrey Andreevff806f92015-03-16 17:05:25 +02001111 .. php:method:: count_all_results([$table = '', [$reset = TRUE]])
James L Parry73817112014-12-08 03:09:29 -08001112
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001113 :param string $table: Table name
Andrey Andreevff806f92015-03-16 17:05:25 +02001114 :param bool $reset: Whether to reset values for SELECTs
James L Parry73817112014-12-08 03:09:29 -08001115 :returns: Number of rows in the query result
1116 :rtype: int
1117
David Wosnitzad31a4e62014-12-12 16:35:35 +01001118 Generates a platform-specific query string that counts
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001119 all records returned by an Query Builder query.
James L Parry73817112014-12-08 03:09:29 -08001120
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001121 .. php:method:: get([$table = ''[, $limit = NULL[, $offset = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001122
1123 :param string $table: The table to query
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001124 :param int $limit: The LIMIT clause
1125 :param int $offset: The OFFSET clause
1126 :returns: CI_DB_result instance (method chaining)
1127 :rtype: CI_DB_result
James L Parry73817112014-12-08 03:09:29 -08001128
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001129 Compiles and runs SELECT statement based on the already
1130 called Query Builder methods.
James L Parry73817112014-12-08 03:09:29 -08001131
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001132 .. php:method:: get_where([$table = ''[, $where = NULL[, $limit = NULL[, $offset = NULL]]]])
James L Parry73817112014-12-08 03:09:29 -08001133
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001134 :param mixed $table: The table(s) to fetch data from; string or array
1135 :param string $where: The WHERE clause
1136 :param int $limit: The LIMIT clause
1137 :param int $offset: The OFFSET clause
1138 :returns: CI_DB_result instance (method chaining)
1139 :rtype: CI_DB_result
James L Parry73817112014-12-08 03:09:29 -08001140
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001141 Same as ``get()``, but also allows the WHERE to be added directly.
James L Parry73817112014-12-08 03:09:29 -08001142
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001143 .. php:method:: select([$select = '*'[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001144
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001145 :param string $select: The SELECT portion of a query
1146 :param bool $escape: Whether to escape values and identifiers
1147 :returns: CI_DB_query_builder instance (method chaining)
1148 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001149
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001150 Adds a SELECT clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001151
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001152 .. php:method:: select_avg([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001153
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001154 :param string $select: Field to compute the average of
1155 :param string $alias: Alias for the resulting value name
1156 :returns: CI_DB_query_builder instance (method chaining)
1157 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001158
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001159 Adds a SELECT AVG(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001160
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001161 .. php:method:: select_max([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001162
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001163 :param string $select: Field to compute the maximum of
1164 :param string $alias: Alias for the resulting value name
1165 :returns: CI_DB_query_builder instance (method chaining)
1166 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001167
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001168 Adds a SELECT MAX(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001169
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001170 .. php:method:: select_min([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001171
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001172 :param string $select: Field to compute the minimum of
1173 :param string $alias: Alias for the resulting value name
1174 :returns: CI_DB_query_builder instance (method chaining)
1175 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001176
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001177 Adds a SELECT MIN(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001178
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001179 .. php:method:: select_sum([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001180
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001181 :param string $select: Field to compute the sum of
1182 :param string $alias: Alias for the resulting value name
1183 :returns: CI_DB_query_builder instance (method chaining)
1184 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001185
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001186 Adds a SELECT SUM(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001187
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001188 .. php:method:: distinct([$val = TRUE])
James L Parry73817112014-12-08 03:09:29 -08001189
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001190 :param bool $val: Desired value of the "distinct" flag
1191 :returns: CI_DB_query_builder instance (method chaining)
1192 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001193
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001194 Sets a flag which tells the query builder to add
1195 a DISTINCT clause to the SELECT portion of the query.
1196
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001197 .. php:method:: from($from)
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001198
1199 :param mixed $from: Table name(s); string or array
1200 :returns: CI_DB_query_builder instance (method chaining)
1201 :rtype: CI_DB_query_builder
1202
1203 Specifies the FROM clause of a query.
James L Parry73817112014-12-08 03:09:29 -08001204
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001205 .. php:method:: join($table, $cond[, $type = ''[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001206
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001207 :param string $table: Table name to join
1208 :param string $cond: The JOIN ON condition
James L Parry73817112014-12-08 03:09:29 -08001209 :param string $type: The JOIN type
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001210 :param bool $escape: Whether to escape values and identifiers
1211 :returns: CI_DB_query_builder instance (method chaining)
1212 :rtype: CI_DB_query_builder
1213
1214 Adds a JOIN clause to a query.
1215
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001216 .. php:method:: where($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001217
1218 :param mixed $key: Name of field to compare, or associative array
1219 :param mixed $value: If a single key, compared to this value
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001220 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001221 :returns: DB_query_builder instance
1222 :rtype: object
1223
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001224 Generates the WHERE portion of the query.
James L Parry73817112014-12-08 03:09:29 -08001225 Separates multiple calls with 'AND'.
1226
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001227 .. php:method:: or_where($key[, $value = NULL[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001228
1229 :param mixed $key: Name of field to compare, or associative array
1230 :param mixed $value: If a single key, compared to this value
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001231 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001232 :returns: DB_query_builder instance
1233 :rtype: object
1234
1235 Generates the WHERE portion of the query.
1236 Separates multiple calls with 'OR'.
1237
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001238 .. php:method:: or_where_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001239
1240 :param string $key: The field to search
1241 :param array $values: The values searched on
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001242 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001243 :returns: DB_query_builder instance
1244 :rtype: object
1245
1246 Generates a WHERE field IN('item', 'item') SQL query,
1247 joined with 'OR' if appropriate.
1248
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001249 .. php:method:: or_where_not_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001250
1251 :param string $key: The field to search
1252 :param array $values: The values searched on
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001253 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001254 :returns: DB_query_builder instance
1255 :rtype: object
1256
1257 Generates a WHERE field NOT IN('item', 'item') SQL query,
1258 joined with 'OR' if appropriate.
1259
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001260 .. php:method:: where_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001261
1262 :param string $key: Name of field to examine
1263 :param array $values: Array of target values
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001264 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001265 :returns: DB_query_builder instance
1266 :rtype: object
1267
1268 Generates a WHERE field IN('item', 'item') SQL query,
1269 joined with 'AND' if appropriate.
1270
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001271 .. php:method:: where_not_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001272
1273 :param string $key: Name of field to examine
1274 :param array $values: Array of target values
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001275 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001276 :returns: DB_query_builder instance
1277 :rtype: object
1278
1279 Generates a WHERE field NOT IN('item', 'item') SQL query,
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001280 joined with 'AND' if appropriate.
1281
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001282 .. php:method:: group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001283
1284 :returns: CI_DB_query_builder instance (method chaining)
1285 :rtype: CI_DB_query_builder
1286
1287 Starts a group expression, using ANDs for the conditions inside it.
1288
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001289 .. php:method:: or_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001290
1291 :returns: CI_DB_query_builder instance (method chaining)
1292 :rtype: CI_DB_query_builder
1293
1294 Starts a group expression, using ORs for the conditions inside it.
1295
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001296 .. php:method:: not_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001297
1298 :returns: CI_DB_query_builder instance (method chaining)
1299 :rtype: CI_DB_query_builder
1300
1301 Starts a group expression, using AND NOTs for the conditions inside it.
1302
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001303 .. php:method:: or_not_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001304
1305 :returns: CI_DB_query_builder instance (method chaining)
1306 :rtype: CI_DB_query_builder
1307
1308 Starts a group expression, using OR NOTs for the conditions inside it.
1309
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001310 .. php:method:: group_end()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001311
1312 :returns: DB_query_builder instance
1313 :rtype: object
1314
1315 Ends a group expression.
1316
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001317 .. php:method:: like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001318
1319 :param string $field: Field name
1320 :param string $match: Text portion to match
1321 :param string $side: Which side of the expression to put the '%' wildcard on
1322 :param bool $escape: Whether to escape values and identifiers
1323 :returns: CI_DB_query_builder instance (method chaining)
1324 :rtype: CI_DB_query_builder
1325
1326 Adds a LIKE clause to a query, separating multiple calls with AND.
1327
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001328 .. php:method:: or_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001329
1330 :param string $field: Field name
1331 :param string $match: Text portion to match
1332 :param string $side: Which side of the expression to put the '%' wildcard on
1333 :param bool $escape: Whether to escape values and identifiers
1334 :returns: CI_DB_query_builder instance (method chaining)
1335 :rtype: CI_DB_query_builder
1336
1337 Adds a LIKE clause to a query, separating multiple class with OR.
1338
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001339 .. php:method:: not_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001340
1341 :param string $field: Field name
1342 :param string $match: Text portion to match
1343 :param string $side: Which side of the expression to put the '%' wildcard on
1344 :param bool $escape: Whether to escape values and identifiers
1345 :returns: CI_DB_query_builder instance (method chaining)
1346 :rtype: CI_DB_query_builder
1347
1348 Adds a NOT LIKE clause to a query, separating multiple calls with AND.
1349
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001350 .. php:method:: or_not_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001351
1352 :param string $field: Field name
1353 :param string $match: Text portion to match
1354 :param string $side: Which side of the expression to put the '%' wildcard on
1355 :param bool $escape: Whether to escape values and identifiers
1356 :returns: CI_DB_query_builder instance (method chaining)
1357 :rtype: CI_DB_query_builder
1358
1359 Adds a NOT LIKE clause to a query, separating multiple calls with OR.
1360
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001361 .. php:method:: having($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001362
1363 :param mixed $key: Identifier (string) or associative array of field/value pairs
1364 :param string $value: Value sought if $key is an identifier
1365 :param string $escape: Whether to escape values and identifiers
1366 :returns: CI_DB_query_builder instance (method chaining)
1367 :rtype: CI_DB_query_builder
1368
1369 Adds a HAVING clause to a query, separating multiple calls with AND.
1370
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001371 .. php:method:: or_having($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001372
1373 :param mixed $key: Identifier (string) or associative array of field/value pairs
1374 :param string $value: Value sought if $key is an identifier
1375 :param string $escape: Whether to escape values and identifiers
1376 :returns: CI_DB_query_builder instance (method chaining)
1377 :rtype: CI_DB_query_builder
1378
1379 Adds a HAVING clause to a query, separating multiple calls with OR.
1380
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001381 .. php:method:: group_by($by[, $escape = NULL])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001382
1383 :param mixed $by: Field(s) to group by; string or array
1384 :returns: CI_DB_query_builder instance (method chaining)
1385 :rtype: CI_DB_query_builder
1386
1387 Adds a GROUP BY clause to a query.
1388
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001389 .. php:method:: order_by($orderby[, $direction = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001390
1391 :param string $orderby: Field to order by
1392 :param string $direction: The order requested - ASC, DESC or random
1393 :param bool $escape: Whether to escape values and identifiers
1394 :returns: CI_DB_query_builder instance (method chaining)
1395 :rtype: CI_DB_query_builder
1396
1397 Adds an ORDER BY clause to a query.
1398
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001399 .. php:method:: limit($value[, $offset = 0])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001400
1401 :param int $value: Number of rows to limit the results to
1402 :param int $offset: Number of rows to skip
1403 :returns: CI_DB_query_builder instance (method chaining)
1404 :rtype: CI_DB_query_builder
1405
1406 Adds LIMIT and OFFSET clauses to a query.
1407
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001408 .. php:method:: offset($offset)
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001409
1410 :param int $offset: Number of rows to skip
1411 :returns: CI_DB_query_builder instance (method chaining)
1412 :rtype: CI_DB_query_builder
1413
1414 Adds an OFFSET clause to a query.
1415
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001416 .. php:method:: set($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001417
1418 :param mixed $key: Field name, or an array of field/value pairs
1419 :param string $value: Field value, if $key is a single field
1420 :param bool $escape: Whether to escape values and identifiers
1421 :returns: CI_DB_query_builder instance (method chaining)
1422 :rtype: CI_DB_query_builder
1423
1424 Adds field/value pairs to be passed later to ``insert()``,
1425 ``update()`` or ``replace()``.
1426
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001427 .. php:method:: insert([$table = ''[, $set = NULL[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001428
1429 :param string $table: Table name
1430 :param array $set: An associative array of field/value pairs
1431 :param bool $escape: Whether to escape values and identifiers
1432 :returns: TRUE on success, FALSE on failure
1433 :rtype: bool
1434
1435 Compiles and executes an INSERT statement.
1436
Andrey Andreev105a48b2016-02-04 15:45:10 +02001437 .. php:method:: insert_batch($table[, $set = NULL[, $escape = NULL[, $batch_size = 100]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001438
1439 :param string $table: Table name
1440 :param array $set: Data to insert
1441 :param bool $escape: Whether to escape values and identifiers
Andrey Andreev105a48b2016-02-04 15:45:10 +02001442 :param int $batch_size: Count of rows to insert at once
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001443 :returns: Number of rows inserted or FALSE on failure
1444 :rtype: mixed
1445
Andrey Andreev105a48b2016-02-04 15:45:10 +02001446 Compiles and executes batch ``INSERT`` statements.
1447
1448 .. note:: When more than ``$batch_size`` rows are provided, multiple
1449 ``INSERT`` queries will be executed, each trying to insert
1450 up to ``$batch_size`` rows.
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001451
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001452 .. php:method:: set_insert_batch($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001453
1454 :param mixed $key: Field name or an array of field/value pairs
1455 :param string $value: Field value, if $key is a single field
1456 :param bool $escape: Whether to escape values and identifiers
1457 :returns: CI_DB_query_builder instance (method chaining)
1458 :rtype: CI_DB_query_builder
1459
1460 Adds field/value pairs to be inserted in a table later via ``insert_batch()``.
1461
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001462 .. php:method:: update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001463
1464 :param string $table: Table name
1465 :param array $set: An associative array of field/value pairs
1466 :param string $where: The WHERE clause
1467 :param int $limit: The LIMIT clause
1468 :returns: TRUE on success, FALSE on failure
1469 :rtype: bool
1470
1471 Compiles and executes an UPDATE statement.
1472
Andrey Andreev105a48b2016-02-04 15:45:10 +02001473 .. php:method:: update_batch($table[, $set = NULL[, $value = NULL[, $batch_size = 100]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001474
1475 :param string $table: Table name
1476 :param array $set: Field name, or an associative array of field/value pairs
1477 :param string $value: Field value, if $set is a single field
Andrey Andreev105a48b2016-02-04 15:45:10 +02001478 :param int $batch_size: Count of conditions to group in a single query
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001479 :returns: Number of rows updated or FALSE on failure
1480 :rtype: mixed
1481
Andrey Andreev105a48b2016-02-04 15:45:10 +02001482 Compiles and executes batch ``UPDATE`` statements.
1483
1484 .. note:: When more than ``$batch_size`` field/value pairs are provided,
1485 multiple queries will be executed, each handling up to
1486 ``$batch_size`` field/value pairs.
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001487
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001488 .. php:method:: set_update_batch($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001489
1490 :param mixed $key: Field name or an array of field/value pairs
1491 :param string $value: Field value, if $key is a single field
1492 :param bool $escape: Whether to escape values and identifiers
1493 :returns: CI_DB_query_builder instance (method chaining)
1494 :rtype: CI_DB_query_builder
1495
1496 Adds field/value pairs to be updated in a table later via ``update_batch()``.
1497
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001498 .. php:method:: replace([$table = ''[, $set = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001499
1500 :param string $table: Table name
1501 :param array $set: An associative array of field/value pairs
1502 :returns: TRUE on success, FALSE on failure
1503 :rtype: bool
1504
1505 Compiles and executes a REPLACE statement.
1506
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001507 .. php:method:: delete([$table = ''[, $where = ''[, $limit = NULL[, $reset_data = TRUE]]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001508
1509 :param mixed $table: The table(s) to delete from; string or array
1510 :param string $where: The WHERE clause
1511 :param int $limit: The LIMIT clause
1512 :param bool $reset_data: TRUE to reset the query "write" clause
1513 :returns: CI_DB_query_builder instance (method chaining) or FALSE on failure
1514 :rtype: mixed
1515
1516 Compiles and executes a DELETE query.
1517
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001518 .. php:method:: truncate([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001519
1520 :param string $table: Table name
1521 :returns: TRUE on success, FALSE on failure
1522 :rtype: bool
1523
1524 Executes a TRUNCATE statement on a table.
1525
1526 .. note:: If the database platform in use doesn't support TRUNCATE,
1527 a DELETE statement will be used instead.
1528
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001529 .. php:method:: empty_table([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001530
1531 :param string $table: Table name
1532 :returns: TRUE on success, FALSE on failure
1533 :rtype: bool
1534
1535 Deletes all records from a table via a DELETE statement.
1536
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001537 .. php:method:: get_compiled_select([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001538
1539 :param string $table: Table name
1540 :param bool $reset: Whether to reset the current QB values or not
1541 :returns: The compiled SQL statement as a string
1542 :rtype: string
1543
1544 Compiles a SELECT statement and returns it as a string.
1545
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001546 .. php:method:: get_compiled_insert([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001547
1548 :param string $table: Table name
1549 :param bool $reset: Whether to reset the current QB values or not
1550 :returns: The compiled SQL statement as a string
1551 :rtype: string
1552
1553 Compiles an INSERT statement and returns it as a string.
1554
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001555 .. php:method:: get_compiled_update([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001556
1557 :param string $table: Table name
1558 :param bool $reset: Whether to reset the current QB values or not
1559 :returns: The compiled SQL statement as a string
1560 :rtype: string
1561
1562 Compiles an UPDATE statement and returns it as a string.
1563
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001564 .. php:method:: get_compiled_delete([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001565
1566 :param string $table: Table name
1567 :param bool $reset: Whether to reset the current QB values or not
1568 :returns: The compiled SQL statement as a string
1569 :rtype: string
1570
David Wosnitzad31a4e62014-12-12 16:35:35 +01001571 Compiles a DELETE statement and returns it as a string.