【问题标题】:Query issue in CodeigniterCodeigniter 中的查询问题
【发布时间】:2011-01-04 16:20:53
【问题描述】:

我想在我的首页随机显示 6 条新闻/评论,但它随机显示相同的内容 6 次,但我不会有重复的内容。这是 SQL 查询:

SELECT
    anmeldelser.billed_sti ,
    anmeldelser.overskrift ,
    anmeldelser.indhold ,
    anmeldelser.id ,
    anmeldelser.godkendt
FROM
    anmeldelser
LIMIT 0,6
UNION ALL
SELECT
    nyheder.id ,
    nyheder.billed_sti ,
    nyheder.overskrift ,
    nyheder.indhold ,
    nyheder.godkendt
FROM nyheder
ORDER BY rand() LIMIT 0,6

【问题讨论】:

    标签: php sql codeigniter random


    【解决方案1】:

    为简单起见,用活动记录显示我的示例, 尝试随机化您的偏移量而不是顺序,同时仍限制为 6

    // get the total number of rows
    $total_rows = $this->db->count_all_results('my_table');
    // offset random point within the total rows
    $offset = rand( 0 , $total_rows - 6 );
    $q = $this->db->offset( $offset )->limit( 6 )->get( 'my_table' );
    print_r( $q->result_array() );
    

    【讨论】:

    【解决方案2】:
    //initialize query builder
    $sql1=$sql2=$this->db;
    $sql1->select('anmeldelser.billed_sti ,anmeldelser.overskrift ,anmeldelser.indhold ,anmeldelser.id ,anmeldelser.godkendt');
    $sql1->from('anmeldelser');
    $sql1->order_by('rand()');
    $sql1->limit(3);
    //get only sql string
    $query1=$sql1->get_compiled_select();
    
    $sql2->select('nyheder.id ,nyheder.billed_sti ,nyheder.overskrift ,nyheder.indhold ,nyheder.godkendt');
    $sql2->from('nyheder');
    $sql2->order_by('rand()');
    $sql2->limit(3);
    $query2=$sql2->get_compiled_select();
    //combine two query
    $query = $this->mydb->query("($query1) UNION ($query2)");
    $result = $query->result();
    

    【讨论】:

      【解决方案3】:

      我假设您需要通过您的this 评论加入两个表。 你没有提到你的外键,所以我也假设。

      您的表的列名是否相同也不清楚。 因此,我正在为您的表发布一个连接查询,其中我假设您的外键和列名,所以请在使用之前更正它。
      这是您加入表格的查询:

      $query = $this->db
          ->select('an.billed_sti,an.overskrift,an.indhold,an.id,an.godkendt, ny.id as ny_id,ny.billed_sti as ny_billed_sti, ny.overskrift as ny_overskrift, ny.indhold as ny_indhold  , ny.godkendt as ny_godkendt ')
          ->from('anmeldelser as an')
          ->join('nyheder as ny', 'ny.id_fk = an.id', 'left outer') // I am assuming here that the [id_fk] field is the foreign key 
          ->limit(0, 6)
          ->order_by('puttablename.tablecolumn', 'asc') // Your you table name and column name by which you want to order, you can use [asc/desc] as your need 
          ->get();
      

      如果你想 UNION here 是它的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多