【问题标题】:LIMIT in SQL query with left join带有左连接的 SQL 查询中的 LIMIT
【发布时间】:2016-05-16 14:27:39
【问题描述】:

我mam SQL Query给我读分类,我们想做分页分类也用过SQL查询给我他们的语句:

public function fetchChildrenNodess($start,$end){
        $q_offset = (int)$start;
        $q_limit = (int)($end - $start);

$query= "select k1.id as id from ".Config::tableKategorie." k1 left join ".Config::tableKategorie."  k2 on k2.nlft<k1.nlft and k2.nrgt>k1.nrgt and k2.nlft>".$this->L." and k2.nrgt<".$this->R." where k1.nlft>".$this->L." and k1.nrgt<".$this->R." and k2.id is null  order by k1.nlft ";

         $i=0; $ret=array();
        // $hash=$this->hash().'_part_'.$start.'_'.$end;


             $Q=mysql_query($query."LIMIT 0, 8 ",CommerceDB::$DB);
             while($R=mysql_fetch_assoc($Q)){
                 $ret[]=new Kategoria($R['id']);

         };

         return $ret;





    }

如果我们在这里使用限制

$Q=mysql_query($query."LIMIT 0, 8 ",CommerceDB::$DB);

所以我只列出了 9 个子类别并转到下一个子类别。子类别也写和9个类别。我需要让我的列表只包含最多 8 个结果。好的,谢谢

【问题讨论】:

    标签: mysql sql pagination left-join limit


    【解决方案1】:

    在此解决方案中,您的函数应该只有 1 个参数,您可以递增(下一个)或递减(上一个)。我假设您的查询和其他代码工作正常。

    页面参数是1-N的序列。如果目标是将记录集限制为最多 8 行,则不要让用户指定 结束值

    public function fetchChildrenNodess($page){
    
       $range_const = 8; // # of rows to show; constant value
    
       if( $page > 0 ) // what if page is 0 or less ???
           $start = ($range_const * ($page-1)); // start limit
       else
           $start = 0;
    
       $end = $range_const - $start; // end limit
    
       $query= "select k1.id as id from ".Config::tableKategorie." k1 left join ".Config::tableKategorie."  k2 on k2.nlft<k1.nlft and k2.nrgt>k1.nrgt and k2.nlft>".$this->L." and k2.nrgt<".$this->R." where k1.nlft>".$this->L." and k1.nrgt<".$this->R." and k2.id is null  order by k1.nlft ";
       $query = $query . ' LIMIT ' . $start . ',' . $end . ';'
    
       $i=0; $ret=array();
    
       $Q = mysql_query($query,CommerceDB::$DB);
       while($R=mysql_fetch_assoc($Q)){
           $ret[]=new Kategoria($R['id']);
       }
    }
    

    测试用例

    +---------+--------+------+ |页码 | $开始 | $结束 | +----------+----------------+ | 1 | 0 | 8 | | 2 | 8 | 8 | | 3 | 16 | 8 | | 4 | 24 | 8 | | | | | | 0 | 0 | 8 | | -1 | 0 | 8 | +---------+--------+------+

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多