2014-04-11 64 views
0

我搜索很多,但没有得到任何帮助与随机记录mysql.I使用随机查询从数据库中获取随机数据与一些限制不在。如果数据库包含100条记录,并假设我给30作为随机函数的限制,有些不在id中。我的问题是,当它第一次触及时,我不在id中给出空白,它随机给我30条记录。但是,对于第二次除了最后30条记录(即不在变量中)之外,它应该给我70条记录中的另外30条记录,但它给我的不到30条即(28,29)。这是因为它首先应用随机函数和限制,然后用不in.My查询过滤它是象下面这样:随机查询Zend

$subQuery = $this->select() 

->from(array('s' => 'shop'), array('s.shop_id','b.shop_name','b.shop_template_id')) 
->order('RAND()') 
->where('s.shop_id NOT in (?)', $shop_id) 
->limit(30); 

$query = $this->select() 

->from(array('b' => $subQuery), array('*')) 
->join(array('p' => 'product'), 's.shop_id = p.shop_id', array('p.product_price')) 
->setIntegrityCheck(false); 
$resultRows = $this->fetchAll($query); 

更新:我为什么它是为有问题的(28,29)记录的某个时候,因为连接查询包含产品的店,如果一些商店正在0产品它没有得到那shop.My问题是,不管产品怎么能从数据库得到那家商店。

回答

0

你的问题是你加入而不是左连接。也不需要子选择。这应该工作:

$objSelect = $this->select()->setIntegrityCheck(false); 
$objSelect->from(
    array('s' => 'shop'), 
    array('s.shop_id','b.shop_name','b.shop_template_id') 
); 
$objSelect->joinLeft(
    array('p' => 'product'), 
    's.shop_id = p.shop_id', 
    array('p.product_price') 
); 
$objSelect->order('RAND()'); 
$objSelect->limit(30); 
$objRowSet = $this->fetchAll($objSelect); 
+0

谢谢您的回答一两件事,我们希望它应该取店随机它干嘛,但默认情况下它适用asc.We不想任何ASC和DESC条件应该得到整个数据库随机店我们尝试 - > order('RAND()') - > order('shop_name DESC') - > order('shop_id DESC')仍然没有给出随机data.any建议。 – user3406754

+0

不确定你在这里的意思,对不起。如果您使用rand()命令,则记录将以随机顺序返回。如果您添加另一个订单,则不会让它们随机化 - 在这种情况下,您必须将第一个(随机)查询包装在子查询中,并对该选择应用另一个订单。但你似乎要求随机订购,你应该从使用上面的代码中获得。 RAND()函数上面的 – Bing

+0

默认情况下会按照升序排列随机记录,我们不需要它,它应该从任何顺序中选择随机数据,而不是升序或降序。 – user3406754