select 查询

优质
小牛编辑
117浏览
2023-12-01

select

数据库查询

select($table, $columns, $where)
  • table [string]

    表名.

  • columns [string/array]

    要查询的字段名.

  • where (optional) [array]

    查询的条件.

select($table, $join, $columns, $where)
  • table [string]

    表名.

  • join [array]

    多表查询,不使用可以忽略.

  • columns [string/array]

    要查询的字段名.

  • where (optional) [array]

    查询的条件.

返回: [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// [>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 backclass 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"// 	)// )