From e54e3d2786b76266e6b6dde481cc493ba002faae Mon Sep 17 00:00:00 2001 From: Derek Allard Date: Wed, 19 Dec 2007 15:53:44 +0000 Subject: where_in_or became or_where_in(), where_not_in_or() became or_where_not_in() for consistency Added not_like() and or_not_like() --- system/database/DB_active_rec.php | 57 ++++++++++++++++++++++++++++------ user_guide/database/active_record.html | 18 ++++++++--- 2 files changed, 61 insertions(+), 14 deletions(-) diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php index cea9bddc5..0a4327b42 100644 --- a/system/database/DB_active_rec.php +++ b/system/database/DB_active_rec.php @@ -276,7 +276,7 @@ class CI_DB_active_record extends CI_DB_driver { * @return object */ - function where_in_or($key = NULL, $values = NULL) + function or_where_in($key = NULL, $values = NULL) { return $this->_where_in($key, $values, FALSE, 'or'); } @@ -314,7 +314,7 @@ class CI_DB_active_record extends CI_DB_driver { * @return object */ - function where_not_in_or($key = NULL, $values = NULL) + function or_where_not_in($key = NULL, $values = NULL) { return $this->_where_in($key, $values, FALSE, 'or'); } @@ -372,7 +372,25 @@ class CI_DB_active_record extends CI_DB_driver { { return $this->_like($field, $match, 'AND ', $side); } - + + // -------------------------------------------------------------------- + + /** + * Not Like + * + * Generates a NOT LIKE portion of the query. Separates + * multiple calls with AND + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function not_like($field, $match = '', $side = 'both') + { + return $this->_like($field, $match, 'AND ', $side, ' NOT'); + } + // -------------------------------------------------------------------- /** @@ -393,6 +411,24 @@ class CI_DB_active_record extends CI_DB_driver { // -------------------------------------------------------------------- + /** + * OR Not Like + * + * Generates a NOT LIKE portion of the query. Separates + * multiple calls with OR + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function or_not_like($field, $match = '', $side = 'both') + { + return $this->_like($field, $match, 'OR ', $side, 'NOT '); + } + + // -------------------------------------------------------------------- + /** * orlike() is an alias of or_like() * this function is here for backwards compatibility, as @@ -416,7 +452,7 @@ class CI_DB_active_record extends CI_DB_driver { * @param string * @return object */ - function _like($field, $match = '', $type = 'AND ', $side = 'both') + function _like($field, $match = '', $type = 'AND ', $side = 'both', $not = '') { if ( ! is_array($field)) { @@ -424,22 +460,23 @@ class CI_DB_active_record extends CI_DB_driver { } foreach ($field as $k => $v) - { + { + $prefix = (count($this->ar_like) == 0) ? '' : $type; - + $v = $this->escape_str($v); - + if ($side == 'before') { - $this->ar_like[] = $prefix." $k LIKE '%{$v}'"; + $this->ar_like[] = $prefix." $k $not LIKE '%{$v}'"; } elseif ($side == 'after') { - $this->ar_like[] = $prefix." $k LIKE '{$v}%'"; + $this->ar_like[] = $prefix." $k $not LIKE '{$v}%'"; } else { - $this->ar_like[] = $prefix." $k LIKE '%{$v}%'"; + $this->ar_like[] = $prefix." $k $not LIKE '%{$v}%'"; } } return $this; diff --git a/user_guide/database/active_record.html b/user_guide/database/active_record.html index cf8ad469f..d938b5dff 100644 --- a/user_guide/database/active_record.html +++ b/user_guide/database/active_record.html @@ -18,7 +18,6 @@ - @@ -274,7 +273,7 @@ $this->db->or_where('id >', $id); $this->db->where_in('username', $names);
// Produces: AND WHERE username IN ('Frank', 'Todd', 'James')

-

$this->db->where_in_or();

+

$this->db->or_where_in();

Generates a WHERE field IN ('item', 'item') SQL query joined with OR if appropriate

$names = array('Frank', 'Todd', 'James');
@@ -288,7 +287,7 @@ $this->db->or_where('id >', $id); $this->db->where_not_in('username', $names);
// Produces: AND WHERE username NOT IN ('Frank', 'Todd', 'James')

-

$this->db->where_not_in_or();

+

$this->db->or_where_not_in();

Generates a WHERE field NOT IN ('item', 'item') SQL query joined with OR if appropriate

$names = array('Frank', 'Todd', 'James');
@@ -338,7 +337,7 @@ $this->db->or_where('id >', $id);

This function is identical to the one above, except that multiple instances are joined by OR:

-$this->db->like('title', $match);
+$this->db->like('title', 'match');
$this->db->or_like('body', $match);

// WHERE title LIKE '%match%' OR body LIKE '%match%'
@@ -347,6 +346,17 @@ $this->db->or_like('body', $match);

Note: or_like() was formerly known as orlike(), which has been deprecated.

+

$this->db->not_like();

+

This function is identical to like(), except that it generates NOT LIKE statements:

+ $this->db->not_like('title', 'match');
+
+// WHERE title NOT LIKE '%match%
+

$this->db->or_not_like();

+

This function is identical to not_like(), except that multiple instances are joined by OR:

+ $this->db->like('title', 'match');
+$this->db->or_not_like('body', 'match');
+
+// WHERE title LIKE '%match% OR body NOT LIKE 'match'

$this->db->group_by();

Permits you to write the GROUP BY portion of your query:

-- cgit v1.2.3-24-g4f1b