博客列表 >关于子查询的总结

关于子查询的总结

郭稳重啊的博客
郭稳重啊的博客原创
2019年03月29日 13:38:48867浏览

主要功能:车辆名称搜索!!!主表:car(外键主要有shop_car_id)关联表分别有shop_car(car表进一步分类,外键:brand_id,type_id),car_brand(车辆的***表),car_brand_type(***的类型表 外键car_brand_id 车辆的类型)

此处需要接受一个参数 : $carName = input("searchValue");

1.联表将查询结果生成sql语句

 $car = Db::name("car")
   ->alias("car")
   ->join("shop_car t", "car.shop_car_id=t.id")
   ->field("car.id car_number_id,t.price,t.desc,car.lat,car.lng,t.brand_id,t.type_id")
   ->buildSql();

汇总:select(false); fetchsql(true)->select();生成不带括号的sql语句, 需要另加括号 $list = Db::table("(" . $car . ")as cars")
           buildSql 生成带括号的sql语句 $list = Db::table("$car as cars")

 第一步的运行结果:"( SELECT car.id car_number_id,`t`.`price`,`t`.`desc`,`car`.`lat`,`car`.`lng`,`t`.`brand_id`,`t`.`type_id` FROM `yisu_car_number` `car` INNER JOIN `yisu_shop_car` `t` ON `car`.`shop_car_id`=`t`.`id` )"

方法1:子查询+联表:

2.将子查询结果作新表cars继续联表查询

$list = Db::table($car . "cars")
   ->join("car_brand brand", "cars.brand_id=brand.id", "LEFT")
   ->join("car_brand_type types", "cars.type_id=types.id", "LEFT")
   ->field("cars.*,brand.*,types.*,brand.name brand_name,types.name types_name")
   ->page($this->page, 5)
   ->whereOr("types.name", "like", "%" . $carName . "%")
   ->whereOr("brand.name", "like", "%" . $carName . "%")
   ->select();

方法2:子查询+闭包
       $list = Db::table($car . "cars")
           ->whereOr('brand_id', 'IN', function ($query)use($carName) {
               $query->name('car_brand')->where("name","like","%".$carName."%")->field("id");
           })
           ->whereOr('type_id', 'IN', function ($query)use($carName) {
               $query->name('car_brand_type')->where("name","like","%".$carName."%")->field("id");
           })
           ->page($this->page, 5)
           ->select();

3.下面只需进行foreach遍历,数据重组

 $arr=[];//过滤不需要的数据

  foreach ($list as $k => $v) {
     $arr[$k]["title"] = $v["brand_name"].$v["types_name"];     
}

  return  $arr;

运行结果:

[

{

"title": "奥***迪Q5",

"price": "22.00",

"hotNum": 7,

"distance": "6525.4km"

},


{

"title": "奥***迪Q5",

"price": "33.00",

"hotNum": 4,

"distance": "6948.67km"

},


{

"title": "奥***迪A6",

"price": "89.00",

"hotNum": 1,

"distance": "0m"

},


{

"title": "奥***迪A6",

"price": "66.00",

"hotNum": 0,

"distance": "5726.73km"

},

{

"title": "奥***迪A6",

"price": "90.00",

"hotNum": 2,

"distance": "5726.73km"

}

]

备注:数据数据库自己添加的,跟实际车辆型号不一样请谅解!!!

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议