Medoo 多表联查

来源:互联网 发布:硬笔书法网络免费班 编辑:程序博客网 时间:2024/06/06 09:26

select方法:有两种传参调用方式

1、单表查询:三个参数

select($table, $columns, $where)

第一个参数类型为字符串:String,即为要查询的数据表名

第二个参数类型为字符串或数组:String/Array,即为要查询的字段名称,如果只是一个字段就写字符串:String,如果是要查询所有是“*”的话,也是传入字符串;如果要查多个字段,比如这个表id和name字段,就写数组:array('id','name')

第三个参数类型为数组:Array,即为查询的Where条件,因Where的写法相对特殊,详细的Where使用说明移步到Medoo Where的使用:条件 里查看

第三个参数默认可不填写,不填写即为不加入where条件进行查询

单表数据查询(带where条件):

 $database = new medoo("my_database");            $datas = $database->select("account", array(          "user_name",          "email"      ), array(          "user_id[>]" => 100      ));  


对应传入数据表名;要显示的字段,这里是多个字段,因此传入数组,最后的where判断条件也是数组形式传入,最终查询返回的结果存储在$datas内,为数组形式

单表数据查询(全表查询):

    $datas = $database->select("account", "*");  
单表数据查询(仅查询一个字段):

    $datas = $database->select("account", "user_name");  

单表数据查询(字段别名):

$data = $database->select("account", array(      "user_id",      "nickname(my_nickname)"  ), array(      "LIMIT" => 20  )); 

字段别名的例子中,原本字段为nickname,后面增加括号后,nickname的别名会被变更为括号内的名字my_nickname


2、多表查询:四个参数

select($table, $join, $columns, $where)

第一个参数类型为字符串:String,即为要查询的数据表名

第二个参数类型为数组:Array,即为要关联查询的数据表与字段名称

第三个参数类型为字符串或数组:String/Array,即为要查询的字段名称,如果只是一个字段就写字符串:String,如果是要查询所有是“*”的话,也是传入字符串;如果要查多个字段,比如这个表id和name字段,就写数组:array('id','name')

第四个参数类型为数组:Array,即为查询的Where条件,因Where的写法相对特殊,详细的Where使用说明移步到Medoo Where的使用:条件语句里查看

第四个参数默认可不填写,不填写即为不加入where条件进行查询

多表数据查询:(关联查询)

$database->select("post", array(      "[>]account" => array("author_id" => "user_id"),         "[>]album" => "user_id",         "[>]photo" => array("user_id", "avatar_id")  ), array(      "post.post_id",      "post.title",      "account.city"  ), array(      "post.user_id" => 100,      "ORDER" => "post.post_id DESC",      "LIMIT" => 50  )); 

从以上的多表查询可以看出,第一个参数依然为表名,只是第二个有了变化。第二个参数为关联数据,第三个参数为字段,第四个为Where条件。

我们在写多表关联查询中,会用到表名.字段【table.colums】的的写法,这里也不意外,一样要写,以上多表关联等同于以下SQL语句:


    SELECT          `post`.`post_id`,          `post`.`title`,          `account`.`city`      FROM `post`      LEFT JOIN `account` ON `post`.`author_id` = `account`.`user_id`      LEFT JOIN `album` USING (`user_id`)      LEFT JOIN `photo` USING (`user_id`, `avatar_id`)      WHERE          `post`.`user_id` = 100      ORDER BY `post`.`post_id` DESC      LIMIT 50  

依据单表查询的规律,去推出关联查询的用法吧

补充说明关联参数$join:(抽取以上唯一一个多表关联的代码段来进行分解说明)

    [>]account" => array("author_id" => "user_id"),  

[>]是关联的意思,关联有四个,分别为:[>] 等同于 LEFT JOIN、[<] 等同于 RIGH JOIN、[<>] 等同于 FULL JOIN、[><] 等同于 INNER JOIN
account为要关联的表,[>account]为LEFT JOIN `account`

array("author_id"=>"user_id") 数组左边的键为主表的字段,数组右边的值为被关联表的字段,这里这样写,他们的条件关系就会成为相等关系

要注意的是(已向官方发送邮件,如果官方已修正的话,就请无视这句):官方里有段注释的地方写[<]为LEFT JOIN,[>]为RIGHT JOIN。实际这段写反了,正确的说明我刚才就写出了,[>] 等同于 LEFT JOIN、[<] 等同于 RIGH JOIN




0 0
原创粉丝点击