使用CodeIgniter从mysql数据库中随机记录

时间:2009-10-26 23:39:44

标签: php mysql codeigniter random

我在网上搜索过,但找不到任何东西......

我有一个mysql数据库,并在一个表中记录,我需要在每个页面加载时从该表中获取随机记录。我怎样才能做到这一点?那有什么功能吗?

欣赏!感谢


排序方法: 链接:http://www.derekallard.com/blog/post/ordering-database-results-by-random-in-codeigniter/

$this->db->select('name');
$query = $this->db->get('table');
$shuffled_query = $query->result_array();
shuffle ($shuffled_query);

foreach ($shuffled_query as $row) {
    echo $row['name'] . '<br />';
}

12 个答案:

答案 0 :(得分:88)

Codeigniter提供了在运行查询时按“RANDOM”排序结果的功能。例如

function get_random_page()
{
    $this->db->order_by('id', 'RANDOM');
    or
    $this->db->order_by('rand()');
    $this->db->limit(1);
    $query = $this->db->get('pages');
    return $query->result_array();

}

我以前用过这个,发现它工作正常。希望有所帮助

答案 1 :(得分:6)

我不知道codeigniter,但获取随机数据集是

SELECT * FROM table ORDER BY RAND() LIMIT 1

显然,相关部分是“ORDER BY RAND()”。

答案 2 :(得分:4)

你知道桌子里有多少条记录吗?你可以这样做:

$count=mysql_exec('select count(*)-1 from some_table');
$count=rand(1,$count);

然后:

select * from
some_Table
limit $count,1

答案 3 :(得分:4)

此代码段对我来说效果很好。

$this->db->select('name');
$this->db->order_by('rand()');
$this->db->limit(1);
$query = $this->db->get('<table>'); //<table> is the db table name
return $query->result_array();

答案 4 :(得分:3)

从大表中获取随机记录非常昂贵。 请勿使用 ORDER BY RAND()

这是一个坏主意,但如果你有一个小桌子没问题。 在庞大的数据库中,这种类型的查询非常慢。

答案 5 :(得分:2)

我将codeigniter与datamapper一起使用。这是我用来从表Advertiser中随机获取记录的代码:

 $ad = new Advertiser();
 $ad->limit(3);
 $ad->order_by('id', 'RANDOM');
 $ad->get();

答案 6 :(得分:2)

public class WebAppInterface {

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(getContext(), toast, Toast.LENGTH_SHORT).show();
    }
}

ORDER BY RAND()子句返回随机记录!您也可以使用LIMIT限制记录。

答案 7 :(得分:1)

让我们想一下我们删除了一些行的表。可能ID无法正确继续。样本编号:1,5,24,28,29,30,31,32,33(9行)

mysql_num_rows返回9

另一种方法将返回不存在的行: $计数= 9; //因为mysql_num_rows()== 9 $计数=兰特(1,$计数); //返回4表示样本,但我们没有用id = 4

但是使用我的方法,你总能得到现有的行。您可以在现场的任何地方分离代码并使用前2个代码。

// Inside of Controller Class
    function _getReal($id,$name_of_table)
 {
 $Q=$this->db->where('id',$id)->get($name_of_table);
 if($Q->num_rows()>0){return $Q;}else{return FALSE;}
 }

 function _getLastRecord($name_of_table)
 {
 $Q=$this->db->select("id")->order_by('id DESC')->limit("1")->get($name_of_table)->row_array();
 return $Q['id'];
 }

 function getrandom()
 {
       $name_of_table="news";
 $id=rand(1,$this->_getLastRecord($name_of_table));
 if($this->_getReal($id,$name_of_table)!==FALSE)
 {
         echo $id;
         // Here goes your code
 }
 else
 {
         $this->getrandom();
 }
// END

答案 8 :(得分:1)

从大表中获取随机记录非常昂贵。但是这个代码非常有效..

$count=mysql_num_rows(mysql_query("select * from table_name WHERE SOME_OF_YOUR_CONDITION"));
$nums=rand(1,$count);


mysql_query(" select * from table_name WHERE SOME_OF_YOUR_CONDITION LIMIT $count,1");

这会有所帮助......

答案 9 :(得分:0)

我认为这不是最好的方法。例如,您已删除now==$count的记录。您必须为mysql_num_rows()

重复此操作

答案 10 :(得分:0)

此函数以随机顺序检索表中的所有行

public function get_questions(){
    $this->db->select('*');
    $this->db->order_by('rand()');
    $this->db->from('multiple_choices');
    $query = $this->db->get();
    return $query->result_array();
}

答案 11 :(得分:0)

没有 ORDER BY RAND() 查询的随机行:

$all_rows = $this->db->get('table')->result_array();
$random_row = $all_rows[rand(0,count($all_rows)-1)];