发布于 2014-08-21 15:52:53 | 4609 次阅读 | 评论: 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,官方已回复邮件,官方对此处文档进行了修正