blob: 38bc7fcffde3ddd685f3a7add00e2208e1133c64 [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
361 an optional third argument. Your options are 'before', 'after' and
362 '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 '!'
368 $this->db->like('title', 'match', 'both'); // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500369
370#. **Associative array method:**
371
372 ::
373
374 $array = array('title' => $match, 'page1' => $match, 'page2' => $match);
375 $this->db->like($array);
Andrey Andreev41738232012-11-30 00:13:17 +0200376 // WHERE `title` LIKE '%match%' ESCAPE '!' AND `page1` LIKE '%match%' ESCAPE '!' AND `page2` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500377
378
James L Parry42a7df62014-11-25 12:06:49 -0800379**$this->db->or_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500380
Andrey Andreev41738232012-11-30 00:13:17 +0200381This method is identical to the one above, except that multiple
Derek Jones8ede1a22011-10-05 13:34:52 -0500382instances are joined by OR::
383
384 $this->db->like('title', 'match'); $this->db->or_like('body', $match);
Andrey Andreev41738232012-11-30 00:13:17 +0200385 // WHERE `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500386
Andrey Andreev41738232012-11-30 00:13:17 +0200387.. note:: ``or_like()`` was formerly known as ``orlike()``, which has been removed.
Derek Jones8ede1a22011-10-05 13:34:52 -0500388
James L Parry42a7df62014-11-25 12:06:49 -0800389**$this->db->not_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500390
Andrey Andreev41738232012-11-30 00:13:17 +0200391This method is identical to ``like()``, except that it generates
392NOT LIKE statements::
Derek Jones8ede1a22011-10-05 13:34:52 -0500393
Andrey Andreev41738232012-11-30 00:13:17 +0200394 $this->db->not_like('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500395
James L Parry42a7df62014-11-25 12:06:49 -0800396**$this->db->or_not_like()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500397
Andrey Andreev41738232012-11-30 00:13:17 +0200398This method is identical to ``not_like()``, except that multiple
Derek Jones8ede1a22011-10-05 13:34:52 -0500399instances are joined by OR::
400
401 $this->db->like('title', 'match');
402 $this->db->or_not_like('body', 'match');
Andrey Andreev41738232012-11-30 00:13:17 +0200403 // WHERE `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'
Derek Jones8ede1a22011-10-05 13:34:52 -0500404
James L Parry141288d2014-12-06 01:45:12 -0800405**$this->db->group_by()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500406
407Permits you to write the GROUP BY portion of your query::
408
409 $this->db->group_by("title"); // Produces: GROUP BY title
410
411You can also pass an array of multiple values as well::
412
413 $this->db->group_by(array("title", "date")); // Produces: GROUP BY title, date
414
415.. note:: group_by() was formerly known as groupby(), which has been
416 removed.
417
James L Parry141288d2014-12-06 01:45:12 -0800418**$this->db->distinct()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500419
420Adds the "DISTINCT" keyword to a query
421
422::
423
424 $this->db->distinct();
425 $this->db->get('table'); // Produces: SELECT DISTINCT * FROM table
426
James L Parry141288d2014-12-06 01:45:12 -0800427**$this->db->having()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500428
429Permits you to write the HAVING portion of your query. There are 2
430possible syntaxes, 1 argument or 2::
431
432 $this->db->having('user_id = 45'); // Produces: HAVING user_id = 45
WanWizard7219c072011-12-28 14:09:05 +0100433 $this->db->having('user_id', 45); // Produces: HAVING user_id = 45
Derek Jones8ede1a22011-10-05 13:34:52 -0500434
435You can also pass an array of multiple values as well::
436
437 $this->db->having(array('title =' => 'My Title', 'id <' => $id));
438 // Produces: HAVING title = 'My Title', id < 45
439
440
441If you are using a database that CodeIgniter escapes queries for, you
442can prevent escaping content by passing an optional third argument, and
443setting it to FALSE.
444
445::
446
447 $this->db->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL
448 $this->db->having('user_id', 45, FALSE); // Produces: HAVING user_id = 45
449
450
James L Parry42a7df62014-11-25 12:06:49 -0800451**$this->db->or_having()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500452
453Identical to having(), only separates multiple clauses with "OR".
454
James L Parry42a7df62014-11-25 12:06:49 -0800455****************
456Ordering results
457****************
458
James L Parry141288d2014-12-06 01:45:12 -0800459**$this->db->order_by()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500460
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200461Lets you set an ORDER BY clause.
462
463The first parameter contains the name of the column you would like to order by.
464
465The second parameter lets you set the direction of the result.
466Options are **ASC**, **DESC** AND **RANDOM**.
Derek Jones8ede1a22011-10-05 13:34:52 -0500467
468::
469
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200470 $this->db->order_by('title', 'DESC');
471 // Produces: ORDER BY `title` DESC
Derek Jones8ede1a22011-10-05 13:34:52 -0500472
473You can also pass your own string in the first parameter::
474
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200475 $this->db->order_by('title DESC, name ASC');
476 // Produces: ORDER BY `title` DESC, `name` ASC
Derek Jones8ede1a22011-10-05 13:34:52 -0500477
478Or multiple function calls can be made if you need multiple fields.
479
480::
481
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200482 $this->db->order_by('title', 'DESC');
483 $this->db->order_by('name', 'ASC');
484 // Produces: ORDER BY `title` DESC, `name` ASC
Derek Jones8ede1a22011-10-05 13:34:52 -0500485
Andrey Andreev98e46cf2012-11-13 03:01:42 +0200486If you choose the **RANDOM** direction option, then the first parameters will
487be ignored, unless you specify a numeric seed value.
488
489::
490
491 $this->db->order_by('title', 'RANDOM');
492 // Produces: ORDER BY RAND()
493
494 $this->db->order_by(42, 'RANDOM');
495 // Produces: ORDER BY RAND(42)
Derek Jones8ede1a22011-10-05 13:34:52 -0500496
497.. note:: order_by() was formerly known as orderby(), which has been
498 removed.
499
Andrey Andreev0dfb62f2012-10-30 11:37:15 +0200500.. note:: Random ordering is not currently supported in Oracle and
501 will default to ASC instead.
Derek Jones8ede1a22011-10-05 13:34:52 -0500502
James L Parry42a7df62014-11-25 12:06:49 -0800503****************************
504Limiting or Counting Results
505****************************
506
James L Parry141288d2014-12-06 01:45:12 -0800507**$this->db->limit()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500508
509Lets you limit the number of rows you would like returned by the query::
510
511 $this->db->limit(10); // Produces: LIMIT 10
512
513The second parameter lets you set a result offset.
514
515::
516
517 $this->db->limit(10, 20); // Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
518
James L Parry141288d2014-12-06 01:45:12 -0800519**$this->db->count_all_results()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500520
521Permits you to determine the number of rows in a particular Active
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000522Record query. Queries will accept Query Builder restrictors such as
Andrey Andreevff806f92015-03-16 17:05:25 +0200523``where()``, ``or_where()``, ``like()``, ``or_like()``, etc. Example::
Derek Jones8ede1a22011-10-05 13:34:52 -0500524
525 echo $this->db->count_all_results('my_table'); // Produces an integer, like 25
526 $this->db->like('title', 'match');
527 $this->db->from('my_table');
WanWizard7219c072011-12-28 14:09:05 +0100528 echo $this->db->count_all_results(); // Produces an integer, like 17
Derek Jones8ede1a22011-10-05 13:34:52 -0500529
Andrey Andreevff806f92015-03-16 17:05:25 +0200530However, this method also resets any field values that you may have passed
531to ``select()``. If you need to keep them, you can pass ``FALSE`` as the
532second parameter::
yaoshanliang2f164052015-03-16 16:48:15 +0800533
Andrey Andreevff806f92015-03-16 17:05:25 +0200534 echo $this->db->count_all_results('my_table', FALSE);
yaoshanliang2f164052015-03-16 16:48:15 +0800535
James L Parry141288d2014-12-06 01:45:12 -0800536**$this->db->count_all()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500537
538Permits you to determine the number of rows in a particular table.
539Submit the table name in the first parameter. Example::
540
541 echo $this->db->count_all('my_table'); // Produces an integer, like 25
542
543**************
WanWizard7219c072011-12-28 14:09:05 +0100544Query grouping
545**************
546
547Query grouping allows you to create groups of WHERE clauses by enclosing them in parentheses. This will allow
Timothy Warrene464b392012-03-13 14:09:31 -0400548you to create queries with complex WHERE clauses. Nested groups are supported. Example::
WanWizard7219c072011-12-28 14:09:05 +0100549
550 $this->db->select('*')->from('my_table')
551 ->group_start()
552 ->where('a', 'a')
553 ->or_group_start()
554 ->where('b', 'b')
555 ->where('c', 'c')
556 ->group_end()
557 ->group_end()
558 ->where('d', 'd')
559 ->get();
560
561 // Generates:
562 // SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'
563
564.. note:: groups need to be balanced, make sure every group_start() is matched by a group_end().
565
James L Parry42a7df62014-11-25 12:06:49 -0800566**$this->db->group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100567
568Starts a new group by adding an opening parenthesis to the WHERE clause of the query.
569
James L Parry42a7df62014-11-25 12:06:49 -0800570**$this->db->or_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100571
572Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'OR'.
573
James L Parry42a7df62014-11-25 12:06:49 -0800574**$this->db->not_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100575
576Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'NOT'.
577
James L Parry42a7df62014-11-25 12:06:49 -0800578**$this->db->or_not_group_start()**
WanWizard7219c072011-12-28 14:09:05 +0100579
580Starts a new group by adding an opening parenthesis to the WHERE clause of the query, prefixing it with 'OR NOT'.
581
James L Parry42a7df62014-11-25 12:06:49 -0800582**$this->db->group_end()**
WanWizard7219c072011-12-28 14:09:05 +0100583
584Ends the current group by adding an closing parenthesis to the WHERE clause of the query.
585
586**************
Derek Jones8ede1a22011-10-05 13:34:52 -0500587Inserting Data
588**************
589
James L Parry141288d2014-12-06 01:45:12 -0800590**$this->db->insert()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500591
592Generates an insert string based on the data you supply, and runs the
593query. You can either pass an **array** or an **object** to the
594function. Here is an example using an array::
595
596 $data = array(
597 'title' => 'My title',
598 'name' => 'My Name',
599 'date' => 'My date'
600 );
WanWizard7219c072011-12-28 14:09:05 +0100601
Derek Jones8ede1a22011-10-05 13:34:52 -0500602 $this->db->insert('mytable', $data);
603 // Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
604
605The first parameter will contain the table name, the second is an
606associative array of values.
607
608Here is an example using an object::
609
610 /*
611 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200612 public $title = 'My Title';
613 public $content = 'My Content';
614 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500615 }
616 */
WanWizard7219c072011-12-28 14:09:05 +0100617
Derek Jones8ede1a22011-10-05 13:34:52 -0500618 $object = new Myclass;
619 $this->db->insert('mytable', $object);
620 // Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
621
622The first parameter will contain the table name, the second is an
623object.
624
625.. note:: All values are escaped automatically producing safer queries.
626
James L Parry141288d2014-12-06 01:45:12 -0800627**$this->db->get_compiled_insert()**
James L Parry42a7df62014-11-25 12:06:49 -0800628
James L Parry141288d2014-12-06 01:45:12 -0800629Compiles the insertion query just like $this->db->insert() but does not
Kyle Farris48d8fb62011-10-14 17:59:49 -0300630*run* the query. This method simply returns the SQL query as a string.
631
632Example::
633
634 $data = array(
635 'title' => 'My title',
636 'name' => 'My Name',
637 'date' => 'My date'
638 );
WanWizard7219c072011-12-28 14:09:05 +0100639
Kyle Farris48d8fb62011-10-14 17:59:49 -0300640 $sql = $this->db->set($data)->get_compiled_insert('mytable');
641 echo $sql;
WanWizard7219c072011-12-28 14:09:05 +0100642
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300643 // Produces string: INSERT INTO mytable (`title`, `name`, `date`) VALUES ('My title', 'My name', 'My date')
Kyle Farris48d8fb62011-10-14 17:59:49 -0300644
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000645The second parameter enables you to set whether or not the query builder query
James L Parry141288d2014-12-06 01:45:12 -0800646will be reset (by default it will be--just like $this->db->insert())::
WanWizard7219c072011-12-28 14:09:05 +0100647
Kyle Farris48d8fb62011-10-14 17:59:49 -0300648 echo $this->db->set('title', 'My Title')->get_compiled_insert('mytable', FALSE);
WanWizard7219c072011-12-28 14:09:05 +0100649
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300650 // Produces string: INSERT INTO mytable (`title`) VALUES ('My Title')
WanWizard7219c072011-12-28 14:09:05 +0100651
Kyle Farris48d8fb62011-10-14 17:59:49 -0300652 echo $this->db->set('content', 'My Content')->get_compiled_insert();
653
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300654 // Produces string: INSERT INTO mytable (`title`, `content`) VALUES ('My Title', 'My Content')
WanWizard7219c072011-12-28 14:09:05 +0100655
656The key thing to notice in the above example is that the second query did not
Andrey Andreevcdf3a9a2018-03-15 16:58:31 +0200657utilize `$this->db->from()` nor did it pass a table name into the first
WanWizard7219c072011-12-28 14:09:05 +0100658parameter. The reason this worked is because the query has not been executed
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200659using `$this->db->insert()` which resets values or reset directly using
660`$this->db->reset_query()`.
661
662.. note:: This method doesn't work for batched inserts.
Kyle Farris48d8fb62011-10-14 17:59:49 -0300663
James L Parry141288d2014-12-06 01:45:12 -0800664**$this->db->insert_batch()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500665
666Generates an insert string based on the data you supply, and runs the
667query. You can either pass an **array** or an **object** to the
668function. Here is an example using an array::
669
670 $data = array(
671 array(
672 'title' => 'My title',
673 'name' => 'My Name',
674 'date' => 'My date'
675 ),
676 array(
677 'title' => 'Another title',
678 'name' => 'Another Name',
679 'date' => 'Another date'
680 )
681 );
WanWizard7219c072011-12-28 14:09:05 +0100682
Derek Jones8ede1a22011-10-05 13:34:52 -0500683 $this->db->insert_batch('mytable', $data);
684 // Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
685
686The first parameter will contain the table name, the second is an
687associative array of values.
688
689.. note:: All values are escaped automatically producing safer queries.
690
James L Parry42a7df62014-11-25 12:06:49 -0800691*************
692Updating Data
693*************
694
James L Parry141288d2014-12-06 01:45:12 -0800695**$this->db->replace()**
Andrey Andreev04c50f52012-10-24 23:05:25 +0300696
697This method executes a REPLACE statement, which is basically the SQL
698standard for (optional) DELETE + INSERT, using *PRIMARY* and *UNIQUE*
699keys as the determining factor.
700In our case, it will save you from the need to implement complex
701logics with different combinations of ``select()``, ``update()``,
702``delete()`` and ``insert()`` calls.
703
704Example::
705
706 $data = array(
707 'title' => 'My title',
708 'name' => 'My Name',
709 'date' => 'My date'
710 );
711
712 $this->db->replace('table', $data);
713
714 // Executes: REPLACE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
715
716In the above example, if we assume that the *title* field is our primary
717key, then if a row containing 'My title' as the *title* value, that row
718will be deleted with our new row data replacing it.
719
720Usage of the ``set()`` method is also allowed and all fields are
721automatically escaped, just like with ``insert()``.
722
James L Parry141288d2014-12-06 01:45:12 -0800723**$this->db->set()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500724
725This function enables you to set values for inserts or updates.
726
727**It can be used instead of passing a data array directly to the insert
728or update functions:**
729
730::
731
732 $this->db->set('name', $name);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300733 $this->db->insert('mytable'); // Produces: INSERT INTO mytable (`name`) VALUES ('{$name}')
Derek Jones8ede1a22011-10-05 13:34:52 -0500734
735If you use multiple function called they will be assembled properly
736based on whether you are doing an insert or an update::
737
738 $this->db->set('name', $name);
739 $this->db->set('title', $title);
740 $this->db->set('status', $status);
WanWizard7219c072011-12-28 14:09:05 +0100741 $this->db->insert('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500742
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300743**set()** will also accept an optional third parameter (``$escape``), that
Derek Jones8ede1a22011-10-05 13:34:52 -0500744will prevent data from being escaped if set to FALSE. To illustrate the
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300745difference, here is ``set()`` used both with and without the escape
Derek Jones8ede1a22011-10-05 13:34:52 -0500746parameter.
747
748::
749
750 $this->db->set('field', 'field+1', FALSE);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300751 $this->db->where('id', 2);
752 $this->db->update('mytable'); // gives UPDATE mytable SET field = field+1 WHERE id = 2
Derek Jones8ede1a22011-10-05 13:34:52 -0500753
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300754 $this->db->set('field', 'field+1');
755 $this->db->where('id', 2);
756 $this->db->update('mytable'); // gives UPDATE `mytable` SET `field` = 'field+1' WHERE `id` = 2
Derek Jones8ede1a22011-10-05 13:34:52 -0500757
758You can also pass an associative array to this function::
759
760 $array = array(
761 'name' => $name,
762 'title' => $title,
763 'status' => $status
764 );
WanWizard7219c072011-12-28 14:09:05 +0100765
Derek Jones8ede1a22011-10-05 13:34:52 -0500766 $this->db->set($array);
767 $this->db->insert('mytable');
768
769Or an object::
770
771 /*
772 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200773 public $title = 'My Title';
774 public $content = 'My Content';
775 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500776 }
777 */
WanWizard7219c072011-12-28 14:09:05 +0100778
Derek Jones8ede1a22011-10-05 13:34:52 -0500779 $object = new Myclass;
780 $this->db->set($object);
781 $this->db->insert('mytable');
782
James L Parry141288d2014-12-06 01:45:12 -0800783**$this->db->update()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500784
785Generates an update string and runs the query based on the data you
786supply. You can pass an **array** or an **object** to the function. Here
787is an example using an array::
788
789 $data = array(
790 'title' => $title,
791 'name' => $name,
792 'date' => $date
793 );
WanWizard7219c072011-12-28 14:09:05 +0100794
Derek Jones8ede1a22011-10-05 13:34:52 -0500795 $this->db->where('id', $id);
796 $this->db->update('mytable', $data);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300797 // Produces:
798 //
799 // UPDATE mytable
800 // SET title = '{$title}', name = '{$name}', date = '{$date}'
801 // WHERE id = $id
Derek Jones8ede1a22011-10-05 13:34:52 -0500802
803Or you can supply an object::
804
805 /*
806 class Myclass {
vlakoffff3f7de2012-06-16 14:21:32 +0200807 public $title = 'My Title';
808 public $content = 'My Content';
809 public $date = 'My Date';
Derek Jones8ede1a22011-10-05 13:34:52 -0500810 }
811 */
WanWizard7219c072011-12-28 14:09:05 +0100812
Derek Jones8ede1a22011-10-05 13:34:52 -0500813 $object = new Myclass;
814 $this->db->where('id', $id);
815 $this->db->update('mytable', $object);
Andrey Andreevd80ecd62015-07-27 21:53:22 +0300816 // Produces:
817 //
818 // UPDATE `mytable`
819 // SET `title` = '{$title}', `name` = '{$name}', `date` = '{$date}'
820 // WHERE id = `$id`
Derek Jones8ede1a22011-10-05 13:34:52 -0500821
822.. note:: All values are escaped automatically producing safer queries.
823
824You'll notice the use of the $this->db->where() function, enabling you
825to set the WHERE clause. You can optionally pass this information
826directly into the update function as a string::
827
828 $this->db->update('mytable', $data, "id = 4");
829
830Or as an array::
831
832 $this->db->update('mytable', $data, array('id' => $id));
833
834You may also use the $this->db->set() function described above when
835performing updates.
836
James L Parry141288d2014-12-06 01:45:12 -0800837**$this->db->update_batch()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500838
839Generates an update string based on the data you supply, and runs the query.
840You can either pass an **array** or an **object** to the function.
841Here is an example using an array::
842
843 $data = array(
844 array(
845 'title' => 'My title' ,
846 'name' => 'My Name 2' ,
847 'date' => 'My date 2'
848 ),
849 array(
850 'title' => 'Another title' ,
851 'name' => 'Another Name 2' ,
852 'date' => 'Another date 2'
853 )
854 );
855
WanWizard7219c072011-12-28 14:09:05 +0100856 $this->db->update_batch('mytable', $data, 'title');
Derek Jones8ede1a22011-10-05 13:34:52 -0500857
WanWizard7219c072011-12-28 14:09:05 +0100858 // Produces:
Derek Jones8ede1a22011-10-05 13:34:52 -0500859 // UPDATE `mytable` SET `name` = CASE
860 // WHEN `title` = 'My title' THEN 'My Name 2'
861 // WHEN `title` = 'Another title' THEN 'Another Name 2'
862 // ELSE `name` END,
WanWizard7219c072011-12-28 14:09:05 +0100863 // `date` = CASE
Derek Jones8ede1a22011-10-05 13:34:52 -0500864 // WHEN `title` = 'My title' THEN 'My date 2'
865 // WHEN `title` = 'Another title' THEN 'Another date 2'
866 // ELSE `date` END
867 // WHERE `title` IN ('My title','Another title')
868
869The first parameter will contain the table name, the second is an associative
870array of values, the third parameter is the where key.
871
872.. note:: All values are escaped automatically producing safer queries.
873
Andrey Andreev9f808b02012-10-24 17:38:48 +0300874.. note:: ``affected_rows()`` won't give you proper results with this method,
875 due to the very nature of how it works. Instead, ``update_batch()``
876 returns the number of rows affected.
877
James L Parry141288d2014-12-06 01:45:12 -0800878**$this->db->get_compiled_update()**
Kyle Farris48d8fb62011-10-14 17:59:49 -0300879
880This works exactly the same way as ``$this->db->get_compiled_insert()`` except
881that it produces an UPDATE SQL string instead of an INSERT SQL string.
882
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200883For more information view documentation for `$this->db->get_compiled_insert()`.
Kyle Farris48d8fb62011-10-14 17:59:49 -0300884
Andrey Andreev6bdfa422013-12-19 15:36:01 +0200885.. note:: This method doesn't work for batched updates.
Derek Jones8ede1a22011-10-05 13:34:52 -0500886
887*************
888Deleting Data
889*************
890
James L Parry141288d2014-12-06 01:45:12 -0800891**$this->db->delete()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500892
893Generates a delete SQL string and runs the query.
894
895::
896
897 $this->db->delete('mytable', array('id' => $id)); // Produces: // DELETE FROM mytable // WHERE id = $id
898
899The first parameter is the table name, the second is the where clause.
900You can also use the where() or or_where() functions instead of passing
901the data to the second parameter of the function::
902
903 $this->db->where('id', $id);
904 $this->db->delete('mytable');
WanWizard7219c072011-12-28 14:09:05 +0100905
Derek Jones8ede1a22011-10-05 13:34:52 -0500906 // Produces:
907 // DELETE FROM mytable
908 // WHERE id = $id
909
910
911An array of table names can be passed into delete() if you would like to
912delete data from more than 1 table.
913
914::
915
916 $tables = array('table1', 'table2', 'table3');
917 $this->db->where('id', '5');
918 $this->db->delete($tables);
919
920
921If you want to delete all data from a table, you can use the truncate()
922function, or empty_table().
923
James L Parry141288d2014-12-06 01:45:12 -0800924**$this->db->empty_table()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500925
926Generates a delete SQL string and runs the
927query.::
928
kenjisc35d2c92011-10-26 17:09:17 +0900929 $this->db->empty_table('mytable'); // Produces: DELETE FROM mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500930
James L Parry141288d2014-12-06 01:45:12 -0800931**$this->db->truncate()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500932
933Generates a truncate SQL string and runs the query.
934
935::
936
937 $this->db->from('mytable');
kenjisc35d2c92011-10-26 17:09:17 +0900938 $this->db->truncate();
WanWizard7219c072011-12-28 14:09:05 +0100939
940 // or
941
Derek Jones8ede1a22011-10-05 13:34:52 -0500942 $this->db->truncate('mytable');
WanWizard7219c072011-12-28 14:09:05 +0100943
Derek Jones8ede1a22011-10-05 13:34:52 -0500944 // Produce:
WanWizard7219c072011-12-28 14:09:05 +0100945 // TRUNCATE mytable
Derek Jones8ede1a22011-10-05 13:34:52 -0500946
947.. note:: If the TRUNCATE command isn't available, truncate() will
948 execute as "DELETE FROM table".
WanWizard7219c072011-12-28 14:09:05 +0100949
James L Parry141288d2014-12-06 01:45:12 -0800950**$this->db->get_compiled_delete()**
James L Parry42a7df62014-11-25 12:06:49 -0800951
Kyle Farris48d8fb62011-10-14 17:59:49 -0300952This works exactly the same way as ``$this->db->get_compiled_insert()`` except
953that it produces a DELETE SQL string instead of an INSERT SQL string.
954
James L Parry141288d2014-12-06 01:45:12 -0800955For more information view documentation for $this->db->get_compiled_insert().
James L Parry42a7df62014-11-25 12:06:49 -0800956
Derek Jones8ede1a22011-10-05 13:34:52 -0500957***************
958Method Chaining
959***************
960
961Method chaining allows you to simplify your syntax by connecting
962multiple functions. Consider this example::
963
964 $query = $this->db->select('title')
Timothy Warrene464b392012-03-13 14:09:31 -0400965 ->where('id', $id)
966 ->limit(10, 20)
967 ->get('mytable');
Derek Jones8ede1a22011-10-05 13:34:52 -0500968
Derek Jones8ede1a22011-10-05 13:34:52 -0500969.. _ar-caching:
970
971*********************
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000972Query Builder Caching
Derek Jones8ede1a22011-10-05 13:34:52 -0500973*********************
974
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000975While not "true" caching, Query Builder enables you to save (or "cache")
Derek Jones8ede1a22011-10-05 13:34:52 -0500976certain parts of your queries for reuse at a later point in your
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000977script's execution. Normally, when an Query Builder call is completed,
Derek Jones8ede1a22011-10-05 13:34:52 -0500978all stored information is reset for the next call. With caching, you can
979prevent this reset, and reuse information easily.
980
981Cached calls are cumulative. If you make 2 cached select() calls, and
982then 2 uncached select() calls, this will result in 4 select() calls.
983There are three Caching functions available:
984
James L Parry42a7df62014-11-25 12:06:49 -0800985**$this->db->start_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500986
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000987This function must be called to begin caching. All Query Builder queries
Derek Jones8ede1a22011-10-05 13:34:52 -0500988of the correct type (see below for supported queries) are stored for
989later use.
990
James L Parry42a7df62014-11-25 12:06:49 -0800991**$this->db->stop_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500992
993This function can be called to stop caching.
994
James L Parry42a7df62014-11-25 12:06:49 -0800995**$this->db->flush_cache()**
Derek Jones8ede1a22011-10-05 13:34:52 -0500996
Jamie Rumbelow7efad202012-02-19 12:37:00 +0000997This function deletes all items from the Query Builder cache.
Derek Jones8ede1a22011-10-05 13:34:52 -0500998
James L Parry42a7df62014-11-25 12:06:49 -0800999An example of caching
1000---------------------
1001
Derek Jones8ede1a22011-10-05 13:34:52 -05001002Here's a usage example::
1003
1004 $this->db->start_cache();
1005 $this->db->select('field1');
1006 $this->db->stop_cache();
1007 $this->db->get('tablename');
1008 //Generates: SELECT `field1` FROM (`tablename`)
WanWizard7219c072011-12-28 14:09:05 +01001009
Derek Jones8ede1a22011-10-05 13:34:52 -05001010 $this->db->select('field2');
1011 $this->db->get('tablename');
1012 //Generates: SELECT `field1`, `field2` FROM (`tablename`)
WanWizard7219c072011-12-28 14:09:05 +01001013
Derek Jones8ede1a22011-10-05 13:34:52 -05001014 $this->db->flush_cache();
1015 $this->db->select('field2');
1016 $this->db->get('tablename');
1017 //Generates: SELECT `field2` FROM (`tablename`)
1018
1019
1020.. note:: The following statements can be cached: select, from, join,
Andrey Andreev97d51542015-10-19 11:28:11 +03001021 where, like, group_by, having, order_by
Derek Jones8ede1a22011-10-05 13:34:52 -05001022
1023
James L Parry42a7df62014-11-25 12:06:49 -08001024***********************
1025Resetting Query Builder
1026***********************
1027
James L Parry141288d2014-12-06 01:45:12 -08001028**$this->db->reset_query()**
Kyle Farris48d8fb62011-10-14 17:59:49 -03001029
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001030Resetting Query Builder allows you to start fresh with your query without
WanWizard7219c072011-12-28 14:09:05 +01001031executing it first using a method like $this->db->get() or $this->db->insert().
1032Just like the methods that execute a query, this will *not* reset items you've
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001033cached using `Query Builder Caching`_.
Kyle Farris48d8fb62011-10-14 17:59:49 -03001034
Jamie Rumbelow7efad202012-02-19 12:37:00 +00001035This is useful in situations where you are using Query Builder to generate SQL
WanWizard7219c072011-12-28 14:09:05 +01001036(ex. ``$this->db->get_compiled_select()``) but then choose to, for instance,
Kyle Farris48d8fb62011-10-14 17:59:49 -03001037run the query::
1038
1039 // Note that the second parameter of the get_compiled_select method is FALSE
1040 $sql = $this->db->select(array('field1','field2'))
1041 ->where('field3',5)
1042 ->get_compiled_select('mytable', FALSE);
1043
1044 // ...
1045 // Do something crazy with the SQL code... like add it to a cron script for
1046 // later execution or something...
1047 // ...
1048
1049 $data = $this->db->get()->result_array();
1050
1051 // Would execute and return an array of results of the following query:
Andrey Andreev896d3e32014-01-07 17:13:25 +02001052 // SELECT field1, field1 from mytable where field3 = 5;
1053
1054.. note:: Double calls to ``get_compiled_select()`` while you're using the
1055 Query Builder Caching functionality and NOT resetting your queries
1056 will results in the cache being merged twice. That in turn will
James L Parry73817112014-12-08 03:09:29 -08001057 i.e. if you're caching a ``select()`` - select the same field twice.
1058
1059***************
1060Class Reference
1061***************
1062
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001063.. php:class:: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001064
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001065 .. php:method:: reset_query()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001066
1067 :returns: CI_DB_query_builder instance (method chaining)
1068 :rtype: CI_DB_query_builder
1069
1070 Resets the current Query Builder state. Useful when you want
1071 to build a query that can be cancelled under certain conditions.
1072
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001073 .. php:method:: start_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001074
1075 :returns: CI_DB_query_builder instance (method chaining)
1076 :rtype: CI_DB_query_builder
1077
1078 Starts the Query Builder cache.
1079
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001080 .. php:method:: stop_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001081
1082 :returns: CI_DB_query_builder instance (method chaining)
1083 :rtype: CI_DB_query_builder
1084
1085 Stops the Query Builder cache.
1086
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001087 .. php:method:: flush_cache()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001088
1089 :returns: CI_DB_query_builder instance (method chaining)
1090 :rtype: CI_DB_query_builder
1091
1092 Empties the Query Builder cache.
1093
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001094 .. php:method:: set_dbprefix([$prefix = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001095
1096 :param string $prefix: The new prefix to use
1097 :returns: The DB prefix in use
1098 :rtype: string
1099
1100 Sets the database prefix, without having to reconnect.
1101
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001102 .. php:method:: dbprefix([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001103
1104 :param string $table: The table name to prefix
1105 :returns: The prefixed table name
1106 :rtype: string
1107
1108 Prepends a database prefix, if one exists in configuration.
1109
Andrey Andreevff806f92015-03-16 17:05:25 +02001110 .. php:method:: count_all_results([$table = '', [$reset = TRUE]])
James L Parry73817112014-12-08 03:09:29 -08001111
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001112 :param string $table: Table name
Andrey Andreevff806f92015-03-16 17:05:25 +02001113 :param bool $reset: Whether to reset values for SELECTs
James L Parry73817112014-12-08 03:09:29 -08001114 :returns: Number of rows in the query result
1115 :rtype: int
1116
David Wosnitzad31a4e62014-12-12 16:35:35 +01001117 Generates a platform-specific query string that counts
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001118 all records returned by an Query Builder query.
James L Parry73817112014-12-08 03:09:29 -08001119
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001120 .. php:method:: get([$table = ''[, $limit = NULL[, $offset = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001121
1122 :param string $table: The table to query
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001123 :param int $limit: The LIMIT clause
1124 :param int $offset: The OFFSET clause
1125 :returns: CI_DB_result instance (method chaining)
1126 :rtype: CI_DB_result
James L Parry73817112014-12-08 03:09:29 -08001127
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001128 Compiles and runs SELECT statement based on the already
1129 called Query Builder methods.
James L Parry73817112014-12-08 03:09:29 -08001130
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001131 .. php:method:: get_where([$table = ''[, $where = NULL[, $limit = NULL[, $offset = NULL]]]])
James L Parry73817112014-12-08 03:09:29 -08001132
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001133 :param mixed $table: The table(s) to fetch data from; string or array
1134 :param string $where: The WHERE clause
1135 :param int $limit: The LIMIT clause
1136 :param int $offset: The OFFSET clause
1137 :returns: CI_DB_result instance (method chaining)
1138 :rtype: CI_DB_result
James L Parry73817112014-12-08 03:09:29 -08001139
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001140 Same as ``get()``, but also allows the WHERE to be added directly.
James L Parry73817112014-12-08 03:09:29 -08001141
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001142 .. php:method:: select([$select = '*'[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001143
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001144 :param string $select: The SELECT portion of a query
1145 :param bool $escape: Whether to escape values and identifiers
1146 :returns: CI_DB_query_builder instance (method chaining)
1147 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001148
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001149 Adds a SELECT clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001150
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001151 .. php:method:: select_avg([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001152
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001153 :param string $select: Field to compute the average of
1154 :param string $alias: Alias for the resulting value name
1155 :returns: CI_DB_query_builder instance (method chaining)
1156 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001157
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001158 Adds a SELECT AVG(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001159
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001160 .. php:method:: select_max([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001161
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001162 :param string $select: Field to compute the maximum of
1163 :param string $alias: Alias for the resulting value name
1164 :returns: CI_DB_query_builder instance (method chaining)
1165 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001166
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001167 Adds a SELECT MAX(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001168
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001169 .. php:method:: select_min([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001170
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001171 :param string $select: Field to compute the minimum of
1172 :param string $alias: Alias for the resulting value name
1173 :returns: CI_DB_query_builder instance (method chaining)
1174 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001175
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001176 Adds a SELECT MIN(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001177
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001178 .. php:method:: select_sum([$select = ''[, $alias = '']])
James L Parry73817112014-12-08 03:09:29 -08001179
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001180 :param string $select: Field to compute the sum of
1181 :param string $alias: Alias for the resulting value name
1182 :returns: CI_DB_query_builder instance (method chaining)
1183 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001184
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001185 Adds a SELECT SUM(field) clause to a query.
James L Parry73817112014-12-08 03:09:29 -08001186
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001187 .. php:method:: distinct([$val = TRUE])
James L Parry73817112014-12-08 03:09:29 -08001188
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001189 :param bool $val: Desired value of the "distinct" flag
1190 :returns: CI_DB_query_builder instance (method chaining)
1191 :rtype: CI_DB_query_builder
James L Parry73817112014-12-08 03:09:29 -08001192
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001193 Sets a flag which tells the query builder to add
1194 a DISTINCT clause to the SELECT portion of the query.
1195
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001196 .. php:method:: from($from)
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001197
1198 :param mixed $from: Table name(s); string or array
1199 :returns: CI_DB_query_builder instance (method chaining)
1200 :rtype: CI_DB_query_builder
1201
1202 Specifies the FROM clause of a query.
James L Parry73817112014-12-08 03:09:29 -08001203
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001204 .. php:method:: join($table, $cond[, $type = ''[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001205
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001206 :param string $table: Table name to join
1207 :param string $cond: The JOIN ON condition
James L Parry73817112014-12-08 03:09:29 -08001208 :param string $type: The JOIN type
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001209 :param bool $escape: Whether to escape values and identifiers
1210 :returns: CI_DB_query_builder instance (method chaining)
1211 :rtype: CI_DB_query_builder
1212
1213 Adds a JOIN clause to a query.
1214
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001215 .. php:method:: where($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001216
1217 :param mixed $key: Name of field to compare, or associative array
1218 :param mixed $value: If a single key, compared to this value
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001219 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001220 :returns: DB_query_builder instance
1221 :rtype: object
1222
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001223 Generates the WHERE portion of the query.
James L Parry73817112014-12-08 03:09:29 -08001224 Separates multiple calls with 'AND'.
1225
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001226 .. php:method:: or_where($key[, $value = NULL[, $escape = NULL]])
James L Parry73817112014-12-08 03:09:29 -08001227
1228 :param mixed $key: Name of field to compare, or associative array
1229 :param mixed $value: If a single key, compared to this value
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001230 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001231 :returns: DB_query_builder instance
1232 :rtype: object
1233
1234 Generates the WHERE portion of the query.
1235 Separates multiple calls with 'OR'.
1236
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001237 .. php:method:: or_where_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001238
1239 :param string $key: The field to search
1240 :param array $values: The values searched on
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001241 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001242 :returns: DB_query_builder instance
1243 :rtype: object
1244
1245 Generates a WHERE field IN('item', 'item') SQL query,
1246 joined with 'OR' if appropriate.
1247
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001248 .. php:method:: or_where_not_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001249
1250 :param string $key: The field to search
1251 :param array $values: The values searched on
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001252 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001253 :returns: DB_query_builder instance
1254 :rtype: object
1255
1256 Generates a WHERE field NOT IN('item', 'item') SQL query,
1257 joined with 'OR' if appropriate.
1258
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001259 .. php:method:: where_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001260
1261 :param string $key: Name of field to examine
1262 :param array $values: Array of target values
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001263 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001264 :returns: DB_query_builder instance
1265 :rtype: object
1266
1267 Generates a WHERE field IN('item', 'item') SQL query,
1268 joined with 'AND' if appropriate.
1269
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001270 .. php:method:: where_not_in([$key = NULL[, $values = NULL[, $escape = NULL]]])
James L Parry73817112014-12-08 03:09:29 -08001271
1272 :param string $key: Name of field to examine
1273 :param array $values: Array of target values
Andrey Andreeva42a01c2015-07-29 16:55:14 +03001274 :param bool $escape: Whether to escape values and identifiers
James L Parry73817112014-12-08 03:09:29 -08001275 :returns: DB_query_builder instance
1276 :rtype: object
1277
1278 Generates a WHERE field NOT IN('item', 'item') SQL query,
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001279 joined with 'AND' if appropriate.
1280
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001281 .. php:method:: group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001282
1283 :returns: CI_DB_query_builder instance (method chaining)
1284 :rtype: CI_DB_query_builder
1285
1286 Starts a group expression, using ANDs for the conditions inside it.
1287
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001288 .. php:method:: or_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001289
1290 :returns: CI_DB_query_builder instance (method chaining)
1291 :rtype: CI_DB_query_builder
1292
1293 Starts a group expression, using ORs for the conditions inside it.
1294
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001295 .. php:method:: not_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001296
1297 :returns: CI_DB_query_builder instance (method chaining)
1298 :rtype: CI_DB_query_builder
1299
1300 Starts a group expression, using AND NOTs for the conditions inside it.
1301
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001302 .. php:method:: or_not_group_start()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001303
1304 :returns: CI_DB_query_builder instance (method chaining)
1305 :rtype: CI_DB_query_builder
1306
1307 Starts a group expression, using OR NOTs for the conditions inside it.
1308
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001309 .. php:method:: group_end()
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001310
1311 :returns: DB_query_builder instance
1312 :rtype: object
1313
1314 Ends a group expression.
1315
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001316 .. php:method:: like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001317
1318 :param string $field: Field name
1319 :param string $match: Text portion to match
1320 :param string $side: Which side of the expression to put the '%' wildcard on
1321 :param bool $escape: Whether to escape values and identifiers
1322 :returns: CI_DB_query_builder instance (method chaining)
1323 :rtype: CI_DB_query_builder
1324
1325 Adds a LIKE clause to a query, separating multiple calls with AND.
1326
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001327 .. php:method:: or_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001328
1329 :param string $field: Field name
1330 :param string $match: Text portion to match
1331 :param string $side: Which side of the expression to put the '%' wildcard on
1332 :param bool $escape: Whether to escape values and identifiers
1333 :returns: CI_DB_query_builder instance (method chaining)
1334 :rtype: CI_DB_query_builder
1335
1336 Adds a LIKE clause to a query, separating multiple class with OR.
1337
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001338 .. php:method:: not_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001339
1340 :param string $field: Field name
1341 :param string $match: Text portion to match
1342 :param string $side: Which side of the expression to put the '%' wildcard on
1343 :param bool $escape: Whether to escape values and identifiers
1344 :returns: CI_DB_query_builder instance (method chaining)
1345 :rtype: CI_DB_query_builder
1346
1347 Adds a NOT LIKE clause to a query, separating multiple calls with AND.
1348
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001349 .. php:method:: or_not_like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001350
1351 :param string $field: Field name
1352 :param string $match: Text portion to match
1353 :param string $side: Which side of the expression to put the '%' wildcard on
1354 :param bool $escape: Whether to escape values and identifiers
1355 :returns: CI_DB_query_builder instance (method chaining)
1356 :rtype: CI_DB_query_builder
1357
1358 Adds a NOT LIKE clause to a query, separating multiple calls with OR.
1359
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001360 .. php:method:: having($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001361
1362 :param mixed $key: Identifier (string) or associative array of field/value pairs
1363 :param string $value: Value sought if $key is an identifier
1364 :param string $escape: Whether to escape values and identifiers
1365 :returns: CI_DB_query_builder instance (method chaining)
1366 :rtype: CI_DB_query_builder
1367
1368 Adds a HAVING clause to a query, separating multiple calls with AND.
1369
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001370 .. php:method:: or_having($key[, $value = NULL[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001371
1372 :param mixed $key: Identifier (string) or associative array of field/value pairs
1373 :param string $value: Value sought if $key is an identifier
1374 :param string $escape: Whether to escape values and identifiers
1375 :returns: CI_DB_query_builder instance (method chaining)
1376 :rtype: CI_DB_query_builder
1377
1378 Adds a HAVING clause to a query, separating multiple calls with OR.
1379
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001380 .. php:method:: group_by($by[, $escape = NULL])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001381
1382 :param mixed $by: Field(s) to group by; string or array
1383 :returns: CI_DB_query_builder instance (method chaining)
1384 :rtype: CI_DB_query_builder
1385
1386 Adds a GROUP BY clause to a query.
1387
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001388 .. php:method:: order_by($orderby[, $direction = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001389
1390 :param string $orderby: Field to order by
1391 :param string $direction: The order requested - ASC, DESC or random
1392 :param bool $escape: Whether to escape values and identifiers
1393 :returns: CI_DB_query_builder instance (method chaining)
1394 :rtype: CI_DB_query_builder
1395
1396 Adds an ORDER BY clause to a query.
1397
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001398 .. php:method:: limit($value[, $offset = 0])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001399
1400 :param int $value: Number of rows to limit the results to
1401 :param int $offset: Number of rows to skip
1402 :returns: CI_DB_query_builder instance (method chaining)
1403 :rtype: CI_DB_query_builder
1404
1405 Adds LIMIT and OFFSET clauses to a query.
1406
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001407 .. php:method:: offset($offset)
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001408
1409 :param int $offset: Number of rows to skip
1410 :returns: CI_DB_query_builder instance (method chaining)
1411 :rtype: CI_DB_query_builder
1412
1413 Adds an OFFSET clause to a query.
1414
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001415 .. php:method:: set($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001416
1417 :param mixed $key: Field name, or an array of field/value pairs
1418 :param string $value: Field value, if $key is a single field
1419 :param bool $escape: Whether to escape values and identifiers
1420 :returns: CI_DB_query_builder instance (method chaining)
1421 :rtype: CI_DB_query_builder
1422
1423 Adds field/value pairs to be passed later to ``insert()``,
1424 ``update()`` or ``replace()``.
1425
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001426 .. php:method:: insert([$table = ''[, $set = NULL[, $escape = NULL]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001427
1428 :param string $table: Table name
1429 :param array $set: An associative array of field/value pairs
1430 :param bool $escape: Whether to escape values and identifiers
1431 :returns: TRUE on success, FALSE on failure
1432 :rtype: bool
1433
1434 Compiles and executes an INSERT statement.
1435
Andrey Andreev105a48b2016-02-04 15:45:10 +02001436 .. php:method:: insert_batch($table[, $set = NULL[, $escape = NULL[, $batch_size = 100]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001437
1438 :param string $table: Table name
1439 :param array $set: Data to insert
1440 :param bool $escape: Whether to escape values and identifiers
Andrey Andreev105a48b2016-02-04 15:45:10 +02001441 :param int $batch_size: Count of rows to insert at once
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001442 :returns: Number of rows inserted or FALSE on failure
1443 :rtype: mixed
1444
Andrey Andreev105a48b2016-02-04 15:45:10 +02001445 Compiles and executes batch ``INSERT`` statements.
1446
1447 .. note:: When more than ``$batch_size`` rows are provided, multiple
1448 ``INSERT`` queries will be executed, each trying to insert
1449 up to ``$batch_size`` rows.
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001450
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001451 .. php:method:: set_insert_batch($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001452
1453 :param mixed $key: Field name or an array of field/value pairs
1454 :param string $value: Field value, if $key is a single field
1455 :param bool $escape: Whether to escape values and identifiers
1456 :returns: CI_DB_query_builder instance (method chaining)
1457 :rtype: CI_DB_query_builder
1458
1459 Adds field/value pairs to be inserted in a table later via ``insert_batch()``.
1460
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001461 .. php:method:: update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001462
1463 :param string $table: Table name
1464 :param array $set: An associative array of field/value pairs
1465 :param string $where: The WHERE clause
1466 :param int $limit: The LIMIT clause
1467 :returns: TRUE on success, FALSE on failure
1468 :rtype: bool
1469
1470 Compiles and executes an UPDATE statement.
1471
Andrey Andreev105a48b2016-02-04 15:45:10 +02001472 .. php:method:: update_batch($table[, $set = NULL[, $value = NULL[, $batch_size = 100]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001473
1474 :param string $table: Table name
1475 :param array $set: Field name, or an associative array of field/value pairs
1476 :param string $value: Field value, if $set is a single field
Andrey Andreev105a48b2016-02-04 15:45:10 +02001477 :param int $batch_size: Count of conditions to group in a single query
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001478 :returns: Number of rows updated or FALSE on failure
1479 :rtype: mixed
1480
Andrey Andreev105a48b2016-02-04 15:45:10 +02001481 Compiles and executes batch ``UPDATE`` statements.
1482
1483 .. note:: When more than ``$batch_size`` field/value pairs are provided,
1484 multiple queries will be executed, each handling up to
1485 ``$batch_size`` field/value pairs.
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001486
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001487 .. php:method:: set_update_batch($key[, $value = ''[, $escape = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001488
1489 :param mixed $key: Field name or an array of field/value pairs
1490 :param string $value: Field value, if $key is a single field
1491 :param bool $escape: Whether to escape values and identifiers
1492 :returns: CI_DB_query_builder instance (method chaining)
1493 :rtype: CI_DB_query_builder
1494
1495 Adds field/value pairs to be updated in a table later via ``update_batch()``.
1496
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001497 .. php:method:: replace([$table = ''[, $set = NULL]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001498
1499 :param string $table: Table name
1500 :param array $set: An associative array of field/value pairs
1501 :returns: TRUE on success, FALSE on failure
1502 :rtype: bool
1503
1504 Compiles and executes a REPLACE statement.
1505
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001506 .. php:method:: delete([$table = ''[, $where = ''[, $limit = NULL[, $reset_data = TRUE]]]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001507
1508 :param mixed $table: The table(s) to delete from; string or array
1509 :param string $where: The WHERE clause
1510 :param int $limit: The LIMIT clause
1511 :param bool $reset_data: TRUE to reset the query "write" clause
1512 :returns: CI_DB_query_builder instance (method chaining) or FALSE on failure
1513 :rtype: mixed
1514
1515 Compiles and executes a DELETE query.
1516
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001517 .. php:method:: truncate([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001518
1519 :param string $table: Table name
1520 :returns: TRUE on success, FALSE on failure
1521 :rtype: bool
1522
1523 Executes a TRUNCATE statement on a table.
1524
1525 .. note:: If the database platform in use doesn't support TRUNCATE,
1526 a DELETE statement will be used instead.
1527
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001528 .. php:method:: empty_table([$table = ''])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001529
1530 :param string $table: Table name
1531 :returns: TRUE on success, FALSE on failure
1532 :rtype: bool
1533
1534 Deletes all records from a table via a DELETE statement.
1535
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001536 .. php:method:: get_compiled_select([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001537
1538 :param string $table: Table name
1539 :param bool $reset: Whether to reset the current QB values or not
1540 :returns: The compiled SQL statement as a string
1541 :rtype: string
1542
1543 Compiles a SELECT statement and returns it as a string.
1544
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001545 .. php:method:: get_compiled_insert([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001546
1547 :param string $table: Table name
1548 :param bool $reset: Whether to reset the current QB values or not
1549 :returns: The compiled SQL statement as a string
1550 :rtype: string
1551
1552 Compiles an INSERT statement and returns it as a string.
1553
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001554 .. php:method:: get_compiled_update([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001555
1556 :param string $table: Table name
1557 :param bool $reset: Whether to reset the current QB values or not
1558 :returns: The compiled SQL statement as a string
1559 :rtype: string
1560
1561 Compiles an UPDATE statement and returns it as a string.
1562
Andrey Andreevcd3d9db2015-02-02 13:41:01 +02001563 .. php:method:: get_compiled_delete([$table = ''[, $reset = TRUE]])
Andrey Andreev4fce5c42014-12-11 17:11:48 +02001564
1565 :param string $table: Table name
1566 :param bool $reset: Whether to reset the current QB values or not
1567 :returns: The compiled SQL statement as a string
1568 :rtype: string
1569
David Wosnitzad31a4e62014-12-12 16:35:35 +01001570 Compiles a DELETE statement and returns it as a string.