Medoo

开始

更新日志

Where 语句

查询

聚合

Fetch

事务

原生SQL查询

Raw object

PDO object

Debug

数据库信息

select

数据库查询

select($table, $columns, $where)
select($table, $join, $columns, $where)
返回: [array]
你可以使用*来匹配所有字段, 但如果你指名字段名可以很好的提高性能.
$database = new medoo();
$datas = $database->select("account", [
    "user_name",
    "email"
], [
    "user_id[>]" => 100
]);

// $datas = array(
//  [0] => array(
//      "user_name" => "foo",
//      "email" => "foo@bar.com"
//  ),
//  [1] => array(
//      "user_name" => "cat",
//      "email" => "cat@dog.com"
//  )
// )

foreach($datas as $data)
{
    echo "user_name:" . $data["user_name"] . " - email:" . $data["email"] . "
"; } // Select all columns $datas = $database->select("account", "*"); // Select a column $datas = $database->select("account", "user_name"); // $datas = array( // [0] => "foo", // [1] => "cat" // )

表关联

多表查询SQL较为复杂,使用Medoo可以轻松的解决它

// [>] == LEFT JOIN
// [<] == RIGH JOIN
// [<>] == FULL JOIN
// [><] == INNER JOIN

$database->select("post", [
	// Here is the table relativity argument that tells the relativity between the table you want to join.
 
	// The row author_id from table post is equal the row user_id from table account
	"[>]account" => ["author_id" => "user_id"],
 
	// The row user_id from table post is equal the row user_id from table album.
	// This is a shortcut to declare the relativity if the row name are the same in both table.
	"[>]album" => "user_id",
 
	// [post.user_id is equal photo.user_id and post.avatar_id is equal photo.avatar_id]
	// Like above, there are two row or more are the same in both table.
	"[>]photo" => ["user_id", "avatar_id"],
 
	// If you want to join the same table with different value,
	// you have to assign the table with alias.
	"[>]account (replyer)" => ["replyer_id" => "user_id"],
 
	// You can refer the previous joined table by adding the table name before the column.
	"[>]account" => ["author_id" => "user_id"],
	"[>]album" => ["account.user_id" => "user_id"],
 
	// Multiple condition
	"[>]account" => [
		"author_id" => "user_id",
		"album.user_id" => "user_id"
	]
], [
	"post.post_id",
	"post.title",
	"account.user_id",
	"account.city",
	"replyer.user_id",
	"replyer.city"
], [
	"post.user_id" => 100,
	"ORDER" => ["post.post_id" => "DESC"],
	"LIMIT" => 50
]);
 
// 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

数据映射

根据您所需要的数据结构,自定义输出的数据格式

$data = $database->select("post", [
	"[>]account" => ["user_id"]
], [
	"post.post_id",
	"post.content",
 
	"userData" => [
		"account.user_id",
		"account.email",
 
		"meta" => [
			"account.location",
			"account.gender"
		]
	]
], [
	"LIMIT" => [0, 2]
]);
 
echo json_encode($data);
 
// Outputed data
[
	{
		post_id: "1",
		content: "Hello world!",
		userData: {
			user_id: "1",
			email: "foo@example.com",
			meta: {
				location: "New York",
				gender: "male"
			}
		}
	},
	{
		post_id: "2",
		content: "Hey everyone",
		userData: {
			user_id: "2",
			email: "bar@example.com",
			meta: {
				location: "London",
				gender: "female"
			}
		}
	}
]

数据类型声明

设置输出的类型

// 可声明的类型: [String | Bool | Int | Number | Object | JSON]
// [String] 默认类型.
// [Object] is a PHP object data decoded by serialize(), and will be unserialize()
// [JSON] is a valid JSON, and will be json_decode()

$data = $database->select("post", [
	"[>]account" => ["user_id"]
], [
	"post.post_id",

	"profile" => [
		"account.age [Int]",
		"account.is_locked [Bool]",
		"account.userData [JSON]"
	]
], [
	"LIMIT" => [0, 2]
]);

echo json_encode($data);

// Output data
[
	{
		post_id: "1",
		profile: {
			age: 20,
			is_locked: true,
			userData: ["foo", "bar", "tim"]
		}
	},
	{
		post_id: "2",
		profile: {
			age: 25,
			is_locked: false,
			userData: ["mydata1", "mydata2"]
		}
	}
]

// Store an object into database, and get it back
class Foo {
	var $bar = "cat";

	public function __wakeup()
	{
		$this->bar = "dog";
	}
}

$object_data = new Foo();

$database->insert("account", [
	"data" => $object_data
]);

$data = $database->select("account", [
	"data [object]"
], [
	"id" => 10
]);

echo $data[ 0 ][ "data" ]->bar;

// The object's __wakeup function will be called and update the value
// So the output will be "dog"
"dog"

字段别名

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

$data = $database->select("account", [
	"user_id",
	"nickname(my_nickname)"
], [
	"LIMIT" => 20
]);
 
// $data = array(
// 	[0] => array(
// 		"user_id" => "1",
// 		"my_nickname" => "foo"
// 	),
// 	[1] => array(
// 		"user_id" => "2",
// 		"my_nickname" => "bar"
// 	)
// )
 
$data = $database->select("post (content)", [
	"[>]account (user)" => "user_id",
], [
	"content.user_id (author_id)",
	"user.user_id"
], [
	"LIMIT" => 20
]);
 
// SELECT
// 	"content"."user_id" AS author_id,
// 	"user"."user_id"
// FROM
// 	"post" AS "content"
// LEFT JOIN "account" AS "user" USING ("user_id")
// LIMIT 2
 
// $data = array(
// 	[0] => array(
// 		"author_id" => "1",
// 		"user_id" => "321"
// 	),
// 	[1] => array(
// 		"author_id" => "2",
// 		"user_id" => "322"
// 	)
// )