当前位置:网站首页>thinkphp6 无关联ID的连表查询(2张表)主要是select的应用

thinkphp6 无关联ID的连表查询(2张表)主要是select的应用

2022-06-23 03:50:00 mercenary's L

于此感谢帮助我弄明白的大佬:PHP菜鸟、夕阳的大哥、QQ老牛、QQ小夕

$sql="SELECT *,(SELECT GROUP_CONCAT(`name`) FROM orde_type WHERE  FIND_IN_SET(id,`orde`.type)) as typename FROM `orde` limit 1,100 ";

自己的理解是:搜索order表里的所有内容和另一张表的内容,另一张表的ID要在orde的type这个集合里被包含,也就是说orde_type表的ID在orde表type字段里要有,as 别名typename是为了方便之后的数据操作。

搜索orde_type这张表时,但是这样同一个名字出现多次,看上去非常不直观。有没有更直观的方法,既让每个名字都只出现一次,又能够显示所有的名字相同的人的id呢?——使用group_concat()。之后的所有意思都是和普通的select * from where (条件)一样了。

1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

这是我自己在thinkPHP6的框架里分解链式查询:::

$list=Db::name('orde')//搜索的主表

     //主表要搜索的字段,我这里是全部字段。分表的搜索结果与主表放在一起返回,field里面可以写搜索的select语句,但是需要是在sql里先运行你自己的原生

//sql 语句确保没错再放入,
    ->field("*,(SELECT GROUP_CONCAT(`name`) FROM orde_type WHERE  FIND_IN_SET(id,`orde`.type)) as typename")
    ->limit(1,100)
    ->paginate(2);
$page = $list->render();
return view('index', [
    'list' => $list,
    'page' => $page,
    ]);

原网站

版权声明
本文为[mercenary's L]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_39947874/article/details/115715454