join

特点,需要处理好重名字段和字段筛选,查询出来的数据是同一级的。

sql语句

[2022-03-10T14:13:43+08:00][sql] SELECT `g`.*,c.name as cat_name FROM `ns_goods` `g` INNER JOIN `ns_category` `c` ON `g`.`category_id`=`c`.`id` WHERE  `g`.`is_delete` = '0'  AND `c`.`name` LIKE '%联想电脑%' ORDER BY `id` DESC LIMIT 0,5 [ RunTime:0.000980s ]

代码

还有搭配的搜索功能

        //接收参数$params = input();//搜索条件$where = [];$where[] = ['c.is_delete', '=', 0];if (!empty($params['username'])) {$where[] = ['u.username', 'like', "%{$params['username']}%"];}if (!empty($params['goods_name'])) {$where[] = ['g.name', 'like', "%{$params['goods_name']}%"];}$data = Comment::alias('c')->join('user u', 'c.user_id = u.id')->join('goods g', 'c.goods_id = g.id')->field('c.*,u.username,g.name as goods_name')->where($where)->order('c.id desc')->paginate(5);return ok($data);

查询结果

{"code": 200,"msg": "","data": {"total": 6,"per_page": 5,"current_page": 1,"last_page": 2,"data": [{"id": 93,"category_id": 21,"name": "项文","desc": "Quam et voluptatem saepe sed voluptatum iusto quos. Minus quia ipsum impedit ut. Est magni consequatur praesentium ea minima.","imgs": ["https://placeholder.pics/svg/80x80/FF2030/FFF/房敏静.png","https://placeholder.pics/svg/80x80/FF2030/FFF/邹振国.png"],"stock": 1067,"shelf": 1,"sell_price": 1506,"is_delete": 0,"create_time": "2022-03-06 22:19:01","update_time": "2022-03-06 22:19:01","cat_name": "联想电脑配件"},{"id": 68,"category_id": 11,"name": "华浩","desc": "Molestiae a est et magni vel. Distinctio tenetur itaque expedita minus minus nihil. Consequatur incidunt mollitia accusantium velit animi corrupti.","imgs": ["https://placeholder.pics/svg/80x80/FF2030/FFF/闵正诚.png","https://placeholder.pics/svg/80x80/FF2030/FFF/米淑英.png"],"stock": 1811,"shelf": 1,"sell_price": 1487,"is_delete": 0,"create_time": "2022-03-06 22:19:01","update_time": "2022-03-06 22:19:01","cat_name": "联想电脑"},{"id": 67,"category_id": 21,"name": "解丽","desc": "Quasi dolorem veniam ut. Itaque modi qui maiores quidem unde. Et quis et ut voluptatem et enim dolorum. Molestiae qui voluptate reiciendis.","imgs": ["https://placeholder.pics/svg/80x80/FF2030/FFF/梁新华.png","https://placeholder.pics/svg/80x80/FF2030/FFF/宇鹰.png"],"stock": 1346,"shelf": 1,"sell_price": 1073,"is_delete": 0,"create_time": "2022-03-06 22:19:01","update_time": "2022-03-06 22:19:01","cat_name": "联想电脑配件"},{"id": 62,"category_id": 21,"name": "佟志勇","desc": "Voluptates porro omnis illum recusandae minima dignissimos. Animi a temporibus provident inventore sunt quos. Eum incidunt molestias cum a illum eveniet in. Ea et quo sit tempora iusto.","imgs": ["https://placeholder.pics/svg/80x80/FF2030/FFF/詹璐.png","https://placeholder.pics/svg/80x80/FF2030/FFF/方致远.png"],"stock": 1637,"shelf": 1,"sell_price": 1847,"is_delete": 0,"create_time": "2022-03-06 22:19:01","update_time": "2022-03-06 22:19:01","cat_name": "联想电脑配件"},{"id": 56,"category_id": 11,"name": "仲正诚","desc": "Earum sit qui iste illum. Ut odio quae facilis facere eos iure est reprehenderit. Quia voluptatem optio deleniti dolores inventore nulla. Voluptates vel quia unde et impedit illum in.","imgs": ["https://placeholder.pics/svg/80x80/FF2030/FFF/柳利.png","https://placeholder.pics/svg/80x80/FF2030/FFF/余淑珍.png"],"stock": 1442,"shelf": 1,"sell_price": 1491,"is_delete": 0,"create_time": "2022-03-06 22:19:01","update_time": "2022-03-06 22:19:01","cat_name": "联想电脑"}]}
}

withJoin

withJoin和haswhere默认是inner join

publicfunction demo5(){$comm= Comment::withJoin("article")->where("article.title","like","%美%")->select()->toArray();}

sql语法:

SELECT*FROM`comment` `comment`INNERJOIN`article` `article`ON`comment`.`article_id`=`article`.`id`WHERE`article`.`title`LIKE'%美%'

hasWhere

注意,该方法,只支持单表,后面再跟一个haswhere是无效的,形式如下

hasWhere()->hasWhere()

不支持多个hasWhere连用是一大遗憾,在laravel中是支持的

代码

        //接收参数$params = input();//搜索条件$where = [];//注意:这里的话需要指定以下表名,否则会出现条件模糊报错$where[] = ['goods.is_delete', '=', 0];//商品名称搜索if (!empty($params['name'])) {$where[] = ['goods.name', 'like', "%{$params['name']}%"];}$data = Goods::hasWhere('category', function ($query) use ($params) {if (!empty($params['cate_name'])) {$where[] = ['name', 'like', "%{$params['cate_name']}%"];}$query->where($where)->hidden(['is_delete']);})->hidden(['is_delete','category.is_delete'])->where($where)->with(['category'])->order('goods.id desc')->paginate(5);

生成的sql语句

[2022-03-10T19:44:22+08:00][sql] SELECT COUNT(*) AS think_count FROM `ns_goods` `Goods` INNER JOIN `ns_category` `Category` ON `Goods`.`category_id`=`Category`.`id` WHERE  `Category`.`name` LIKE '%电脑%'  AND `goods`.`is_delete` = '0'  AND `goods`.`name` LIKE '%蓝帅%' LIMIT 1 [ RunTime:0.000817s ]

where in ids

可以每次都根据传递过来的参数进行单表查询,然后根据返回的id数组进行查找。

代码

        //接收参数$params = input();//搜索条件$where = [];//注意:这里的话需要指定以下表名,否则会出现条件模糊报错$where[] = ['is_delete', '=', 0];//评论内容if (!empty($params['content'])) {$where[] = ['content', 'like', "%{$params['content']}%"];}if (!empty($params['username'])) {$res = User::where('username', 'like', "%{$params['username']}%")->where('is_delete', 0)->column('id');//如果不等于空if ($res) {$where[] = ['user_id', 'in', $res];}}if (!empty($params['goods_name'])) {$res = Goods::where('name', 'like', "%{$params['goods_name']}%")->where('is_delete', 0)->column('id');//如果不等于空if ($res) {$where[] = ['goods_id', 'in', $res];}}$data = Comment::where($where)->order('id desc')->withoutField(['is_delete'])->append(['username','goods_name'])->paginate(5);return ok($data);

结果

{"code": 200,"msg": "","data": {"total": 43,"per_page": 5,"current_page": 9,"last_page": 9,"data": [{"id": 4,"user_id": 24,"goods_id": 10,"content": "Pariatur dolores aut optio commodi ipsa nostrum laboriosam. Quaerat omnis eaque atque nemo. Autem vel quibusdam inventore voluptates eveniet et nisi.","create_time": "2022-03-14 20:20:18","update_time": "2022-03-14 20:20:18","username": "user24","goods_name": "柳淑华"},{"id": 3,"user_id": 2,"goods_id": 6,"content": "Ut voluptatem occaecati aut culpa natus nisi repellendus. In dolorem dolor rem perspiciatis ut. Aut reprehenderit sunt doloremque inventore voluptate adipisci quo.","create_time": "2022-03-14 20:20:18","update_time": "2022-03-14 20:20:18","username": "user2","goods_name": "衣鹏程"},{"id": 1,"user_id": 21,"goods_id": 21,"content": "Inventore dolor sunt error laborum ex omnis voluptatem. Esse iure omnis illo ut sint autem distinctio magni. Et est omnis pariatur quidem sequi. In ratione qui dolor consequatur aut.","create_time": "2022-03-14 20:20:18","update_time": "2022-03-14 20:20:18","username": "user21","goods_name": "霍晨"}]}
}

tp6多表联合查询的几种方式(模糊搜索+分页+字段限制)相关推荐

  1. 基本功:SQL 多表联合查询的几种方式

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/zt15732625878/article /details/79074123 前言 最近在项目中用到连接查询,连接查询是关系数 ...

  2. SQL 多表联合查询的几种方式

    来源:blog.csdn.net/zt15732625878/article/details/79074123    https://www.jb51.net/article/205675.htm 前 ...

  3. mysql连接查询分为几种方式_SQL多表查询的几种连接方式

    一.基础 1.1 SQL查询的基本原理 第一.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 第二.两 ...

  4. oracle多表联合查询更新,ORACLE 两表关联更新三种方式

    不多说了,我们来做实验吧. 创建如下表数据 select * from t1 ; select * from t2; 现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致. 方式1,u ...

  5. 【SQL】SQL语句多表联合查询

    SQL语句多表联合查询 CREATE TABLE orders( id int not null primary key identity(1,1), customerName varchar(100 ...

  6. MyBatis框架 多表联合查询实现

    三种方式: ①业务装配 对两个表编写单表查询语句,在业务层(Serivce)把查询的两个结果进行关联 ②使用Auto Mapping特性 在实现两表联合查询时通过别名完成映射,使用Maybatis的& ...

  7. mysql同张表关联多次查询_MySQL多次单表查询和多表联合查询

    Tip:不建议执行三张表以上的多表联合查询 对数据量不大的应用来说,多表联合查询开发高效,但是多表联合查询在表数据量大,并且没有索引的时候,如果进行笛卡儿积,那数据量会非常大,sql执行效率会非常低 ...

  8. SQL语法(五) 多表联合查询

    前言 当需要获取的数据分布在多张中,考虑使用联合查询,本章将学习两种查询方式(sql92/sql99) 范例 1.笛卡儿积 将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积.结果的数量为所有表的 ...

  9. MySQL 子查询,多表联合查询,视图,存储过程详解

    -----------MySQL数据库中多表联合查询---------- 多表联合查询的理论依据:笛卡尔积 通过笛卡尔乘积,把两个或者多个表变为一个大表,里面包含了有效的,无效的记录(需要加条件进行过 ...

  10. MySQL学习笔记-03高级查询、多表联合查询、聚合函数、子查询、视图、存储过程、权限、

    关于作者 金山老师:从事Java.大数据.Python职业化培训6年,项目管理.软件开发14年.欢迎添加我的微信号[jshand],最近建了一些微信交流群,扫描下方二维码添加公众号,回复:进群 文章目 ...

最新文章

  1. asp导出word中文乱码_解决文档打开乱码问题丨小工具系列
  2. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
  3. 缓存区溢出检测工具BED
  4. Php魔术函数学习与应用 __construct() __destruct() __get()等
  5. 第一个ilasm程序
  6. 处理Matlab Coder之后, Compiler can't find tmwtypes.h问题
  7. vue路由跳转子组件_vue-router之路由钩子(组件内路由钩子必须在路由组件调用,子组件没用)...
  8. Linux chmod命令
  9. Maven高级之archetype(原型/骨架)开发
  10. Python之np.where的使用
  11. Configure universal group membership caching
  12. highlighting v5.0插件使用 一(持续更新)
  13. DB9串口和RJ45接线图
  14. U盘文件系统FAT32转为NTFS
  15. 设计师们必须要知道的素材网站
  16. Mysql调优(updating~)
  17. python +高德地图API调用
  18. 计算机毕业设计JAVA家庭饮用水监测系统mybatis+源码+调试部署+系统+数据库+lw
  19. KNN(k-nearest neighbor的缩写)最近邻算法原理详解
  20. 数据库身份证号用什么类型_油罐内壁防腐施工用什么类型的升降机?

热门文章

  1. 云分众享,阿里云盘资源搜索工具
  2. VINS-Mono关键知识点总结——边缘化marginalization理论和代码详解
  3. Java实现 蓝桥杯 算法提高 日期计算
  4. 面试常见问题及应答技巧
  5. 系统漏洞利用与提权攻击机场景
  6. 笔记本开热点自动断开
  7. CentOS7-1810 系统DNS服务器BIND软件配置说明
  8. MFC CFile输出文本文件乱码
  9. MATLAB函数——fir1
  10. 开源java数据库库