在国家或人员关系数据库设计时,会遇到无限级分类的情况,优良的数据库设计会给程序性能带来提升
数据库设计一个pid关联父级的id,设计如下:
使用递归方法得出pid=0所有的子类及子类的子类,在数据量多的时候,该方法会给数据库很大负担
class Index
{
static $country;
public function index()
{
$ch = db('country')->where('pid',0)->find();
$this->getTree($ch['id']);
var_dump(self::$country);
}
public function getTree($pid){
$res = db('country')->where('pid',$pid)->select();
if(!empty($res)){
foreach ($res as $key => $value) {
self::$country[] = $value;
$this->getTree($value['id']);
}
}
}
}
设计如下图
//这样我们就很轻松的得出pid=0的所有子类及子类的子类
$sql = 'SELECT * FROM %s WHERE `pid` LIKE \'%s\'';
//这边pid可以添加索引,提高查询效率
$sql = sprintf($sql,'_country','0,%');
$tree = db()->query($sql);
var_dump($tree);
两种方法各有优缺,场景适用就好
向客户的URL(香港服务器IP)发送POST数据,出现请求超时。在浏览器可以正常访问该URL,但在服务器上ping不通,curl该地址也不行
服务器内部ping不通,您尝试在网卡配置文件中加上dns-nameservers 8.8.8.8之后再测试下
vim /etc/resolv.conf
然后添加
nameserver 8.8.8.8
与上游银行通对接提交过去的金额通常是int型以分为单位,此时我们需要将以元为单位的金额乘以100再提交过去,但在float转int时候,金额可能会变动造成误差
$value = 39.80;
var_dump($value*100); //输出3980
var_dump(intval($value*100)); //输出3979
先将乘以100的金额转str,再转int(这个方法虽然可行,但不可靠)
//比较原始的方式
$value = 39.80;
$str = (string)($value*100);
var_dump(intval($str)); //输出3980
使用php内置btmatch函数来处理
//更优的方法
$value = 39.80;
$res = bcmul($val,100,0);
var_dump(intval($res)); //输出3980