博主信息
博文 40
粉丝 1
评论 0
访问量 38800
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于子查询的总结
郭稳重啊的博客
原创
1036人浏览过

主要功能:车辆名称搜索!!!主表: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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学