php sql子查询语句就是先经由过程一个语句来查询出一个结果,然后再经由过程一个查询语句从这个结果中再次查询,语句如“select max(goods_id),cat_id,goods_name from goods group by cat”。

引荐:《PHP视频教程》
所谓子查询语句,就是先经由过程一个语句来查询出一个结果,然后再经由过程一个查询语句从这个结果中再次查询。子查询语句平常有以下3种。下面以一个案例来做解说。
案例:查询【例1】中每一个分类下的最新的那一条商品信息。
假如经由过程单句查询,是猎取不到的。如下面如许是毛病的:
select max(goods_id),cat_id,goods_name from goods group by cat_id;
如许猎取到了每一个分类的最新商品ID号goods_id,然则别的信息如goods_name商品名称倒是旧的那一条。所以,要想猎取到每一个分类的最新商品信息,要么离开语句查询,要么用子查询。
1:where子查询语句。
select * from goods where goods_id in ( select max(goods_id) from goods group by cat_id);
这句代码,我们先用group by查询出每一个分类的最新的商品ID,然后经由过程where...in () 前提语句查询出每一个分类最新商品ID 的商品的信息。这里是把group by语句作为where的子查询语句。
2:from子查询语句。
select * from (select * from goods order by cat_id,goods_id desc) as gk group by cat_id;
From子查询就是把 select查询到的结果作为一张表,如上面加粗的代码。注:必需把select查询到的结果集 取一个别号,如上面代码中的赤色部份。不然会报错。
如许,我们一样查询出了每一个分类下最新商品的信息。
3:exists子查询语句:
题目:查询【例1】哪些栏目下有商品。分类表名:category
select * from category where exists( select * from goods where goods.cat_id=category.cat_id )
上句中的exists排查了(当商品表中的分类ID=分类表中的分类ID)时,有无商品。假如有,就再查询这个分类的信息,如查没有,就消除这个分类。末了结果就是,查询出了有商品的商品分类信息。
嗯,这里我们引见了3种比较经常运用的mysql数据库子查询语句:where子查询语句、from子查询语句、exists子查询语句。固然,假如你不想运用子查询语句,也能够把它们拆分红2个语句来实行,结果也是一样的。
以上就是php多表查询之子查询语句的细致内容,更多请关注ki4网别的相干文章!
收藏 | 0