diff --git a/sys/db/query_builder.php b/sys/db/query_builder.php index 6344024..d0dac3d 100644 --- a/sys/db/query_builder.php +++ b/sys/db/query_builder.php @@ -355,7 +355,11 @@ class Query_Builder { */ public function order_by($field, $type="") { - // @todo Implement Order by Random + // Random case + if (stripos($type, 'rand') !== FALSE) + { + $type = (($rand = $this->sql->random()) !== FALSE ) ? $rand : 'ASC'; + } // Set fields for later manipulation $field = $this->db->quote_ident($field); @@ -370,7 +374,9 @@ class Query_Builder { } // Set the final string - $this->order_string = ' ORDER BY '.implode(',', $order_clauses); + $this->order_string = (empty($rand)) + ? ' ORDER BY '.implode(',', $order_clauses) + : ' ORDER BY'.$rand; return $this; } diff --git a/tests/databases/firebird-qb.php b/tests/databases/firebird-qb.php index 3c361f9..8b6474b 100644 --- a/tests/databases/firebird-qb.php +++ b/tests/databases/firebird-qb.php @@ -120,6 +120,19 @@ class FirebirdQBTest extends UnitTestCase { $this->assertTrue(is_resource($query)); } + function TestOrderByRand() + { + $query = $this->qb->select('id, key as k, val') + ->from('create_test') + ->where('id >', 0) + ->where('id <', 9000) + ->order_by('id', 'rand') + ->limit(5,2) + ->get(); + + $this->assertTrue(is_resource($query)); + } + /*function TestGroupBy() { $query = $this->qb->select('id, key as k, val') diff --git a/tests/databases/sqlite-qb.php b/tests/databases/sqlite-qb.php index 9b85515..7f8fab5 100644 --- a/tests/databases/sqlite-qb.php +++ b/tests/databases/sqlite-qb.php @@ -114,6 +114,19 @@ $this->assertIsA($query, 'PDOStatement'); } + function TestOrderByRandom() + { + $query = $this->qb->select('id, key as k, val') + ->from('create_test') + ->where('id >', 0) + ->where('id <', 9000) + ->order_by('id', 'rand') + ->limit(5,2) + ->get(); + + $this->assertIsA($query, 'PDOStatement'); + } + function TestGroupBy() { $query = $this->qb->select('id, key as k, val') diff --git a/tests/test_dbs/FB_TEST_DB.FDB b/tests/test_dbs/FB_TEST_DB.FDB index f554a51..fbb39cb 100755 Binary files a/tests/test_dbs/FB_TEST_DB.FDB and b/tests/test_dbs/FB_TEST_DB.FDB differ