Medoo Select的使用:查询数据

从数据库中查询数据

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

返回:Array(数组形式)

  select($table, $columns, $where)
  • 第一个参数: $table 类型为字符串:String,即为要查询的数据表名。
  • 第二个参数: $columns 类型为字符串或数组:String/Array,即为要查询的字段名称,如果只是一个字段就写字符串:String,如果是要查询所有是“*”的话,也是传入字符串;如果要查多个字段,比如这个表id和name字段,就写数组:array('id','name')
  • 第三个参数: $where 类型为数组: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");

select($table, $join, $columns, $where)
  • 第一个参数: $table 类型为字符串:String,即为要查询的数据表名。
  • 第二个参数: $join 类型为数组:Array,即为要关联查询的数据表与字段名称。
  • 第三个参数: $columns 类型为字符串或数组:String/Array,即为要查询的字段名称,如果只是一个字段就写字符串:String,如果是要查询所有是“*”的话,也是传入字符串;如果要查多个字段,比如这个表id和name字段,就写数组:array('id','name')
  • 第四个参数: $where 类型为数组: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") 数组左边的键为主表的字段,数组右边的值为被关联表的字段,这里这样写,他们的条件关系就会成为相等关系


你可以使用别名,以防止字段冲突。

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

$data = $database->select("account", array(
    "user_id",
    "nickname(my_nickname)"
), array(
    "LIMIT" => 20
));
 
/* 结果为:
$data = array(
  [0] => array(
      "user_id" => "1",
      "my_nickname" => "foo"
  ),
  [1] => array(
      "user_id" => "2",
      "my_nickname" => "bar"
  )
 )
*/

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

多表数据查询(字段别名)

$data = $database->select("post", [
    "[>]account" => "user_id",
], [
    "post.user_id(post_user_id)",
    "account.user_id(account_user_id)"
], [
    "LIMIT" => 20
]);
 
 
/* 结果
 $data = array(
  [0] => array(
      "post_user_id" => "1",
      "account_user_id" => "321"
  ),
  [1] => array(
      "post_user_id" => "2",
      "account_user_id" => "322"
  )
 )
*/