1

我有一个页面,其中包含从数据库加载的 4 种产品,当您向下滚动时,您每次都会获得 4 种以上的产品。

此产品以随机方式加载,问题是重复产品。

这是我在模型中使用的线:

$this->db->order_by('productID', 'RANDOM');

没有这条线一切正常。我不能使用limitset to 1 因为我有:

$query = $this->db->get('product', 4, $offset);

有一种简单的方法可以解决这个问题吗?我要做一个包含所有产品的数组吗?

更新

这是 index.php 中的脚本

<script type="text/javascript">
$(document).ready(function(){

    var products = <?= $get_products ?>;
    var loaded_products = 0;

    $(".loadMoreProducts").click(function(){
        loaded_products += 4;

        var dati = "welcome/get_products/" + loaded_products;

        $.ajax({
          url:'welcome/get_products/' + loaded_products,
          type: 'get',
          data: dati,
          cache: false,
          success: function() {

            $.get(dati, function(data){
                $("#mainContainerProductWelcome").append(data);
            });

            if(loaded_products >= products - 4) {
                $(".loadMoreProducts").hide();
            } else {
                // load more still visible
            }
          },
          error: function() {
            // there's something wrong
          }
        });

        // show spinner on ajax request starts
        $(".loading-spinner").ajaxStart(function(){
            $(".loading-spinner").show();
            $(".text-load").hide();
        });

        // ajax request complets hide spinner
        $(".loading-spinner").ajaxStop(function(){
            $(".loading-spinner").delay(5000).hide();
            $(".text-load").show();
        });

        return false;
    });

    // submit form contact
    $(window).scroll(function() {
    if($(window).scrollTop() + $(window).height() >= $(document).height()) {
        loaded_products += 4;

        var dati = "welcome/get_products/" + loaded_products;

        $.ajax({
          url:'welcome/get_products/' + loaded_products,
          type: 'get',
          data: dati,
          cache: false,
          success: function() {

            $.get(dati, function(data){
                $("#mainContainerProductWelcome").append(data);
            });

            if(loaded_products >= products - 4) {
                $(".loadMoreProducts").hide();
            } else {
                // load more still visible
            }
          },
          error: function() {
            // there's something wrong
          }
        });

        // show spinner on ajax request starts
        $(".loading-spinner").ajaxStart(function(){
            $(".loading-spinner").show();
            $(".text-load").hide();
        });

        // ajax request complets hide spinner
        $(".loading-spinner").ajaxStop(function(){
            $(".loading-spinner").delay(5000).hide();
            $(".text-load").show();
        });
        return false;
    }
});

});
</script>

控制器:

function index()
{
    $this->load->helper('url');
    $data['description'] = "Description";
    $data['keywords'] = "Keywords";
    $data['products'] = $this->abitainterni->getAllProductsLimit();
    $data['get_products'] = $this->abitainterni->get_products();
    //load view
    $this->load->view('welcome', $data);
}

function get_products($offset)
{
    $data['products'] = $this->abitainterni->getAllProductsLimit($offset);
    $this->load->view('get_products', $data);
}

模型:

function getAllProductsLimit($offset=0)
{
    $sql = "SELECT * FROM product P";
    $this->db->order_by('productPosition','ASC');
    $query = $this->db->get('product', 4, $offset);
  if($query->num_rows() > 0){
    return $query->result();
  } else {
    return 0;
  }
}

function get_products()
{
    $query = $this->db->count_all_results('product');
    return $query;
}
4

2 回答 2

5

制作一个接收到的 ProductID 数组

例如:,在第一次运行中,您的产品 ID 为 (1,5,8,9)

执行以下操作。

$exlude_ids= 1,5,8,9;

$this->db->where_not_in('productID',$exlude_ids);

下次,将这些 id 添加到 exclude_ids 并继续循环。

我在一个网站上做过这个。因此,如果您需要更多帮助,请发表评论。

编辑

控制器 :

在获取前四个产品行后,将这些产品 ID 添加到一个数组中并将其传递给模型,如下所示。

例如:$exlcude_ids = array(1,5,7,3);

模型 :

function getAllProductsLimit($offset=0,$exlude_ids=array())
{
    $this->db->select(*);
    if(count($exclude_ids)>0)
    {
       $this->db->where_not_in('productID',$exlude_ids);
    }
    $this->db->order_by('productPosition','ASC');
    $query = $this->db->get('product', 4, $offset);
  if($query->num_rows() > 0)
  {
    return $query->result();
  }
  else
  {
    return 0;
  }
}
于 2013-01-18T11:31:48.957 回答
3

你应该这样做。当您第一次运行查询时,请设置一个数组。
现在,当您获得结果(4 行)并显示记录时,将这些记录的 id 放入 javascript 数组中。您必须使用 ajax 向下滚动并获取更多结果。下次当你想运行查询时,首先发送 javascript 数组,到 php 使用 json。PHP 将得到 json 编码的数组 .decode 它。如果它的长度等于 0 则运行简单的 query.else run WHERE productID NOT IN ($array)。这样你就可以做到。

于 2013-01-18T11:30:51.197 回答