1.聚合函数及having使用细节
$info = $goods -> where() -> field(字段) -> select();
1、返回一个二维数组信息
2、返回全部数据表信息
3、给该方法传递参数
1) select(20) 查询主键值等于30的记录信息
2) select(“20,21,22,23”); 查询主键值等于20,21,22,23的记录信息
shop/Admin/Controller/GoodsController.class.php
程序代码如下:
public function showlist(){
$goods = D("Goods");
//查询主键值等于30的记录信息
//$info = $goods -> select(30);
//查询主键值等于20,21,22,23的记录信息
$info = $goods -> select("20,21,22,23");
//把数据assign到模板
$this -> assign('info',$info);
$this->display();
}
4、find()如果我们查询的结果只有一个信息,使用select()会返回一个二维数组,为了使用方便我们可以返回一个一维数组,这时候可使用find()方法
shop/Admin/Controller/GoodsController.class.php
程序代码如下:
public function showlist(){
$goods = D("Goods");
$info = $goods -> find(30); //返回一维数组结果
show_bug($info);
$this->display();
}
5、having()方法设置查询条件,where()方法设置查询条件
1)、使用有先后顺序
2)、where price>100 having price>100
3)、where设置条件,字段必须是数据表中存在的字段
4)、having设置条件,字段必须是selec语句查询出来的字段
//两者都能使用的情况
select goods_price,goods_number from sw_goods where goods_price>100 //正确
select goods_price,goods_number from sw_goods having goods_price>100 //正确
//只可以使用where,不可以使用having
select goods_name,goods_number from sw_goods where goods_price>100 //正确
select goods_name,goods_number from sw_goods having goods_price>100 //错误
//只可以使用having,不可以使用where
//查询每种goods_category_id商品的价格平均值,获得平均价格大于1000的种类信息
select goods_category_id,avg(goods_price) as ag from sw_goods where ag>1000 group by goods_category_id //错误
select goods_category_id,avg(goods_price) as ag from sw_goods group by goods_category_id having ag>1000 //正确
shop/Admin/Controller/GoodsController.class.php
程序代码如下:
public function showlist(){
$goods = D("Goods");
$info = $goods -> having('goods_price > 1000') -> select();
//把数据assign到模板
$this -> assign('info',$info);
$this->display();
}
6、相关聚合函数 count() sum() avg() max() min()
以上聚合函数是最后被调用的方法,可以结合具体条件方法使用
shop/Admin/Controller/GoodsController.class.php
程序代码如下:
public function showlist(){
$goods = D("Goods");
//查询记录总条数
echo $goods -> count();
echo "<br/>";
//获得价格最高的商品信息
echo $goods -> max('goods_price');
echo "<br/>";
//获得价格大于1000的商品总数
echo $goods -> where('goods_price > 1000') -> count();
echo "<br/>";
//此时limit()不起效果
//运行时默认为limit(1)
echo $goods -> limit(5) -> where('goods_price > 1000') -> count();
//把数据assign到模板
$this -> assign('info',$info);
$this->display();
}
2.添加数据记录add
数组方式实现数据添加
shop/Admin/Controller/GoodsController.class.php
程序代码如下:
//添加商品
public function add(){
//利用数组方式实现数据添加
$goods = D("Goods");
$ar = array(
'goods_name' => '红米Pro',
'goods_price' => 1000,
'goods_number' => 53,
);
//goods_name、goods_price、goods_number是数据表中字段名称
$rst = $goods -> add($ar);
show_bug($rst);
if ($rst > 0) {
echo "success";
}else{
echo "failure";
}
$this->display();
}
AR方法实现数据添加
TP框架中的AR是假的,但是可以实现
1、ActiveRecord 活跃记录
2、AR规定了程序与数据库之间的关系
1)、一个数据表对应一个类Model
2)、一条数据记录对应类的一个对象
3)、每个字段对应该对象的具体属性
shop/Admin/Controller/GoodsController.class.php
程序代码如下:
//添加商品
public function add(){
//利用AR方式实现数据添加
$goods = D("Goods");
$goods -> goods_name = '红米';
$goods -> goods_price = 1200;
$goods -> goods_number = 53;
$rst = $goods -> add($ar);
show_bug($rst);
if ($rst > 0) {
echo "success";
}else{
echo "failure";
}
$this->display();
}
3.收集表单数据并实现收集添加
制作一个表单
shop/Admin/View/Goods/add.html
程序代码如下:
/* 常量__SELF__对应的路径为:ThinkPHP/shop/index.php/Admin/Goods/add */
<form action="{$smarty.const.__SELF__}" method="post" enctype="multipart/form-data">
<table border="1" width="100%" class="table_a">
<tr>
<td>商品名称</td>
<td><input type="text" name="goods_name" /></td>
</tr>
<tr>
<td>商品价格</td>
<td><input type="text" name="goods_price" /></td>
</tr>
<tr>
<td>商品数量</td