Sql Codeigniter获得具有限制的随机记录
我创建了一个页面,每次使用codeigniter和Ajax向下滚动页面时,都会加载4个产品 在使用codeigniter和jQuery创建分页时,我遵循了这一点。Sql Codeigniter获得具有限制的随机记录,sql,codeigniter,jquery,codeigniter-2,Sql,Codeigniter,Jquery,Codeigniter 2,我创建了一个页面,每次使用codeigniter和Ajax向下滚动页面时,都会加载4个产品 在使用codeigniter和jQuery创建分页时,我遵循了这一点。一切正常,而且我使用Ajax更改了数据库的加载类型 我的codeigniter有问题。 当我试图从表中获取随机记录时,我得到了重复的产品 这是codeigniter中的功能: 更新控制器 function index() { $this->load->helper('url'); $data['description
一切正常,而且我使用Ajax更改了数据库的加载类型 我的codeigniter有问题。 当我试图从表中获取随机记录时,我得到了重复的产品 这是codeigniter中的功能: 更新控制器
function index()
{
$this->load->helper('url');
$data['description'] = "Description";
$data['keywords'] = "Keywords";
$data['products'] = $this->abitainterni->getAllProductsLimit();
$data['get_products'] = $this->abitainterni->get_products();
$this->load->view('welcome', $data);
}
function get_products($offset)
{
$already_used = $this->input->post('already_used');
$already = explode(',', $already_used);
$data['products'] = $this->abitainterni->getAllProductsLimit($offset, $already);
$arr['view'] = $this->load->view('get_products', $data, true);
$bossy = '';
foreach($data['products'] as $p) {
$bossy .= $p->productID.',';
}
$arr['view'] = $bam;
$arr['ids'] = $bossy;
echo json_encode($arr);
return;
}
更新脚本
<script type="text/javascript">
$(document).ready(function(){
<?
$like_a_boss = "";
foreach($products as $gp):
$like_a_boss .= $gp->productID.',';
endforeach;
?>
var products = '<?= $like_a_boss; ?>';
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: 'post',
data: {already_used: products},
cache: false,
success: function(data) {
var obj = $.parseJSON(data);
$("#mainContainerProductWelcome").append(obj.view);
already_used += obj.ids;
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()) {
// click on load more btn
$(".loadMoreProducts").click();
return false;
}
});
});
</script>
$(文档).ready(函数(){
var乘积=“”;
var加载的产品=0;
$(“.loadMoreProducts”)。单击(函数(){
装载的产品+=4;
var dati=“欢迎/获取产品/”+加载的产品;
$.ajax({
url:'welcome/get_products/'+loaded_products,
键入:“post”,
数据:{已使用:产品},
cache:false,
成功:功能(数据){
var obj=$.parseJSON(数据);
$(“#mainContainerProductWelcome”).append(obj.view);
已使用+=对象ID;
if(加载的产品>=产品-4){
$(“.loadMoreProducts”).hide();
}否则{
//加载更多仍然可见的内容
}
},
错误:函数(){
//有点不对劲
}
});
//在ajax请求启动时显示微调器
$(“.loading spinner”).ajaxStart(函数(){
$(“.loading微调器”).show();
$(“.text load”).hide();
});
//ajax请求完成隐藏微调器
$(“.loading spinner”).ajaxStop(函数(){
$(“.loading微调器”).delay(5000.hide();
$(“.text load”).show();
});
返回false;
});
//提交表格联系人
$(窗口)。滚动(函数(){
如果($(窗口).scrollTop()+$(窗口).height()>=$(文档).height()){
//点击加载更多btn
$(“.loadMoreProducts”)。单击();
返回false;
}
});
});
您需要跟踪已查询的产品,将其id放入数组中,然后使用类似where not in的命令。比如说:
function getAllProductsLimit($offset=0, $already_used = array(0))
{
$this->db->order_by('productID', 'RANDOM');
$this->db->where_not_in('productID', $already_used);
$query = $this->db->get('product', 4, $offset);
if($query->num_rows() > 0){
return $query->result();
} else {
return 0;
}
}
NEW CONTROLLER
function index()
{
$this->load->helper('url');
$data['title'] = "Scopri i nostri prodotti";
$data['description'] = "Description";
$data['keywords'] = "Keywords";
$data['products'] = $this->abitainterni->getAllProductsLimit();
$data['get_products'] = $this->abitainterni->get_products();
$this->load->view('welcome', $data);
}
function get_products($offset)
{
$already_used = $this->input->post('already_used');
$already = explode(',', $already_used);
$data['products'] = $this->abitainterni->getAllProductsLimit($offset, $already);
$arr['view'] = $this->load->view('get_products', $data, true);
$bossy = '';
foreach($data['products'] as $p)
{
$bossy .= $->productID.',';
}
$arr['view'] = $bam;
$arr['ids'] = $bossy;
echo json_encode($arr);
return;
}
NEW SCRIPT
<script type="text/javascript">
$(document).ready(function(){
<?
$like_a_boss = '';
foreach($get_products as $gp):?>
$like_a_boss .= $gp->productID.',';
endforeach;?>
var products = '<?= $like_a_boss; ?>';
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: 'post',
data: {already_used: products},
cache: false,
success: function(data) {
var obj = $.parseJSON(data);
$("#mainContainerProductWelcome").append(obj.view);
already_used += obj.ids;
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()) {
// click on load more btn
$(".loadMoreProducts").click();
return false;
}
});
});
</script>
函数getAllProductsLimit($offset=0,$ready\u used=array(0))
{
$this->db->order_by('productID','RANDOM');
$this->db->where_not_in('productID',$ready_used);
$query=$this->db->get('product',4,$offset);
如果($query->num\u rows()>0){
返回$query->result();
}否则{
返回0;
}
}
新控制器
函数索引()
{
$this->load->helper('url');
$data['title']=“Scopri i nostri prodotti”;
$data['description']=“description”;
$data['keywords']=“关键字”;
$data['products']=$this->abitainterni->getAllProductsLimit();
$data['get_products']=$this->abitainterni->get_products();
$this->load->view('welcome',$data);
}
函数获取产品($offset)
{
$ready_used=$this->input->post('ready_used');
$ready=explode(“,”,$ready_已使用);
$data['products']=$this->abitainterni->getAllProductsLimit($offset,$ready);
$arr['view']=$this->load->view('get_products',$data,true);
$bossy='';
foreach($p形式的数据['products'))
{
$bossy.=$->productID',';
}
$arr['view']=$bam;
$arr['id']=$bossy;
echo json_编码($arr);
返回;
}
新剧本
$(文档).ready(函数(){
$like_a_boss.=$gp->productID.',';
endforeach;?>
var乘积=“”;
var加载的产品=0;
$(“.loadMoreProducts”)。单击(函数(){
装载的产品+=4;
var dati=“欢迎/获取产品/”+加载的产品;
$.ajax({
url:'welcome/get_products/'+loaded_products,
键入:“post”,
数据:{已使用:产品},
cache:false,
成功:功能(数据){
var obj=$.parseJSON(数据);
$(“#mainContainerProductWelcome”).append(obj.view);
已使用+=对象ID;
if(加载的产品>=产品-4){
$(“.loadMoreProducts”).hide();
}否则{
//加载更多仍然可见的内容
}
},
错误:函数(){
//有点不对劲
}
});
//在ajax请求启动时显示微调器
$(“.loading spinner”).ajaxStart(函数(){
$(“.loading微调器”).show();
$(“.text load”).hide();
});
//ajax请求完成隐藏微调器
$(“.loading spinner”).ajaxStop(函数(){
$(“.loading微调器”).delay(5000.hide();
$(“.text load”).show();
});
返回false;
});
//提交表格联系人
$(窗口)。滚动(函数(){
如果($(窗口).scrollTop()+$(窗口).height()>=$(文档).height()){
//点击加载更多btn
$(“.loadMoreProducts”)。单击();
返回false;
}
});
});
然后,无论您在何处使用该函数,在将结果回显到ajax函数之前,运行一个快速foreach,将刚刚获得的产品ID添加到已使用的数组中。您可以存储此is会话,也可以在ajax文件之间来回传递,或者如果您的ajax文件编写得很好,您无需担心,只需使用数据属性或其他方式将产品id附加到正在显示的每个产品上,并以这种方式生成数组。谢谢您的帮助,当我用foreach将产品加载到页面中时,如果我不太理解的话,在这之前:我必须检查$ready_used var?好的,如果你想让产品id保持在会话中,你可以用foreach,但这要在你调用数据库之前。我可以向您展示一些代码,如果您发布加载带有f的页面的初始控制器