zone_g@163.com
- zone_g@163.com 回复了 kokocool 的回答
1) 采用官方的方式
select * from tb_name order by rand() limit N
2)采用类似偏移方式
select * from tb_name where id >= (select floor(max(id) * rand()) from tb_name ) order by id asc limit N;
3)优化的方式
select * from tb_name as r1 join (select round(rand() * (select max(id) from tb_name)) as id2) as r2 where r1.id >= r2.id2 order by r1.id asc limit N;
@lzrqyc110
`$query = HappyBank::find();$query->alias('r1'); $query->join('JOIN', "(SELECT ROUND(RAND() * (". HappyBank::find()->select('MAX(id)')->createCommand()->getRawSql() .")) AS id2) AS r2"); $query->where("r1.id >= r2.id2"); $query->orderBy([ 'r1.id' => SORT_ASC ]);
// var_dump($query->createCommand()->getRawSql());
var_dump($query->all());` 不知道你还用不用得上
要么提供一个name参数 要么提供一个model和一个属性 这是必须的条件 报错指的是你的属性配置不正确 你可以把代码截得大一些 看不全
- zone_g@163.com 回复了 zone_g@163.com 的回答
情况一:如果你的集合表和商品表有一个独立对应的关联字段(其实这个字段没什么用,只是迎合Yii的hasMany写法)
return $this->hasMany(Goods::className(), ['商品关联字段(如:userid)', '商品库关联字段(如:userid)'])->andWhere([Yii::$app->db->schema->getRawTableName(Goods::::tableName()).".id" => $this-> good_ids]);//两个userid是一致的
情况二:如果两个表没有独立对应的字段
return Goods()::find()->where(['id'=>$this-> good_ids]);两种写法都没用过,想想的思路,可以试一下,望回复验证结果
@数字派
protected function createRelationQuery($class, $link, $multiple){ /* @var $class ActiveRecordInterface */ /* @var $query ActiveQuery */ $query = $class::find(); $query->primaryModel = $this; $query->link = $link; $query->multiple = $multiple; return $query; }
这个是hasmany最底层的代码,原理是一样的
- zone_g@163.com 回复了 zone_g@163.com 的回答
情况一:如果你的集合表和商品表有一个独立对应的关联字段(其实这个字段没什么用,只是迎合Yii的hasMany写法)
return $this->hasMany(Goods::className(), ['商品关联字段(如:userid)', '商品库关联字段(如:userid)'])->andWhere([Yii::$app->db->schema->getRawTableName(Goods::::tableName()).".id" => $this-> good_ids]);//两个userid是一致的
情况二:如果两个表没有独立对应的字段
return Goods()::find()->where(['id'=>$this-> good_ids]);两种写法都没用过,想想的思路,可以试一下,望回复验证结果
可以写到预加载或者用join查询
其实yii2hasOne或many也就是这个原理 他们只是创建一个查询器 但是并没有查询 当你调用的时候才去查询 所以第二种方法的最后没有all() 应该是没有正确配置权限过滤器导致,在behaviors或配置文件的as access
建议仔细阅读所使用的插件的文档当前module中的user组件和应用的user组件是否一致
理论上执行了loginout就会清楚身份信息的情况一:如果你的集合表和商品表有一个独立对应的关联字段(其实这个字段没什么用,只是迎合Yii的hasMany写法)
return $this->hasMany(Goods::className(), ['商品关联字段(如:userid)', '商品库关联字段(如:userid)'])->andWhere([Yii::$app->db->schema->getRawTableName(Goods::::tableName()).".id" => $this-> good_ids]);//两个userid是一致的
情况二:如果两个表没有独立对应的字段
return Goods()::find()->where(['id'=>$this-> good_ids]);两种写法都没用过,想想的思路,可以试一下,望回复验证结果
``$i = 1;//标题第一行开始
foreach($sskkMap as $k =>$col) //表格首行{
$objPHPExcel->setActiveSheetIndex()->setCellValue($col.$i, $k);
}
$i = 2 ;//数据第2行开始
foreach($lists as $record){
foreach($kkssMap as $k =>$col) //表格第二行起。这里总是缺一条数据没提取出来。。 { //好像就是数据的首条。 $objPHPExcel->setActiveSheetIndex()->setCellValue($col.$i, $record[$k]); }
$i++;
}``
这样写就可以了,标题行不要放在数据循环内
- zone_g@163.com 回复了 zone_g@163.com 的评论
请教,如果是跨库关联怎么操作呢?
用户的信息表在库1,
用户所管理的信息在库2,
这样在库2的model中写关联会报出找不到表的错误,因为他用的是当前model的库(库2),而用户在库1中@38664
这个问题现在解决了
在关联的目标model中设置表明的时候如下
public static function tableName(){ return '库名.{{%表明}}'; }
只需要修改关联的model的表明设置,其他的东西不用动
另外需要注意的是,我分库的时候是用的两个链接身份,两个身份没有相互访问的权限,所以你关联的时候要把关联目标的数据库的查询权限加到你当前库的连接身份权限里面