【问题标题】:Random record from mysql database with CodeIgniter使用 CodeIgniter 从 mysql 数据库中随机记录
【发布时间】:2010-12-10 07:41:11
【问题描述】:

我在互联网上进行了研究,但找不到任何东西......

我有一个 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 />';
}

【问题讨论】:

  • $this->db->order_by('rand()');是您添加到代码中以获得随机结果的行

标签: php mysql codeigniter random


【解决方案1】:

Codeigniter 提供了在您运行查询时按“随机”排序结果的功能。比如

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();

}

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

【讨论】:

  • 对于大表,这个解决方案很慢!最好的方法是在php中生成一个随机数,在mysql中生成SELECTWHERE。 @RajSar 的方法与此类似。
  • @user57750 这不可靠。如果某些记录已损坏或已被删除怎么办?
【解决方案2】:

我不知道codeigniter,但是得到一个随机数据集是

SELECT * FROM table ORDER BY RAND() LIMIT 1

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

【讨论】:

【解决方案3】:

你知道表中有多少条记录吗?你可以这样做:

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

然后:

select * from
some_Table
limit $count,1

【讨论】:

  • 我认为这是最好的方法,但应该是 Limit $count, 1 吗?
【解决方案4】:

这段代码 sn-p 对我很有效。

$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();

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:
        SELECT product_id, title, description
        FROM products
        WHERE active = 1
        AND stock > 0
        ORDER BY RAND()
        LIMIT 4
        

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

        【讨论】:

          【解决方案8】:

          假设我们有一个表格,我们删除了一些行。可能有 ID 不能正确继续。样品编号:1,5,24,28,29,30,31,32,33(9 行)

          mysql_num_rows 返回 9

          另一种方法将返回不存在的行: $计数=9; //因为mysql_num_rows()==9 $count=rand(1,$count); // 返回 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
          

          【讨论】:

            【解决方案9】:

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

            $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");
            

            这会很有帮助...

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

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

                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();
                }
                

                【讨论】:

                  【解决方案12】:

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

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

                  【讨论】:

                    猜你喜欢
                    • 2019-03-25
                    • 2018-07-20
                    • 1970-01-01
                    • 2011-01-27
                    • 2023-04-06
                    • 1970-01-01
                    • 2011-07-02
                    • 1970-01-01
                    • 2021-12-26
                    相关资源
                    最近更新 更多