我在工作中天天研究zen cart的程序,那个叫人痛苦,最近比较痛苦的是经常碰见mysql多表联合查询,多的时候有12个表联合查询,zen cart的程序员不知道是懒还是技术好,一个语句完成啦20几个功能模块需要的数据,我修改就痛苦的很~~~!!!我只会select * from table where id=1,2,3,。。。。。。。。。。
后台来在网上找啦一堆,看懂啦个大概,很多没有注意教PHP操作输出的数组集首先我们要了解三个用于联合查询的语法:
left join (左链) right join(右链) inner jion(内联);
我们开始讲解列子的时候,先要三个表:
表t1是会员的名字,级别ID
id name lvid(级别ID)
1 张 2
2 王 3
3 李 1
4 小 5
表t2是会员的级别ID的值(比如1是幼儿园 2是小学生 3是中学生)
lv_id lv(会员级别值)
1 幼儿园
2 小学生
3 中学生
4 高中生
表t3是会员发帖的表,有帖子ID,帖子标题,会员ID,帖子属性(禁止阅读 和 允许阅读)
art_id art_name(帖子标题) h_id (会员ID) art_pr(帖子属性)
1 你 1 0
2 我 3 1
3 他 1 0
4 大家 3 1
三个表都建好啦,我们先看表t1 和 t2 来讲解left join 和 right jion
left join 左连查询 语法是
<?php
$query="SELECT t1.id, t1.name, t2.lv FROM t1 LEFT JOIN t2 ON t1.lvid=t2.lv_id" ;
while($row=mysql_fetch_array($query)){ print_r($row);
?>
查询结果如下:
id name lv
1 张 小学生
2 王 中学生
3 李 幼儿园
4 小 null
可以看出左连查询就是按照左边t1的条件查询,保留t1所有数据,右边表t1没有符合左边表t2的数据为空
RIGHT JOIN刚好相反
<?php
$query ="SELECT t1.id, t1.name, t2.lv FROM t1 RIGHT JOIN t2 ON t1.lvid=t2.lv_id"
while($row=mysql_fetch_array($query)){ print_r($row);
?>
查询结果如下:
id name lv
3 李 幼儿园
1 张 小学生
2 王 中学生
NULL NULL 高中生
可以看出左连查询就是按照左边t1的条件查询,保留t2所有数据,t1没有符合的数据为空