发布于 2014-08-21 15:52:53 | 4559 次阅读 | 评论: 0 | 来源: 网友投递

 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

注:[>] 等同于 LEFT JOIN、[<] 等同于 RIGH JOIN,官方已回复邮件,官方对此处文档进行了修正

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务