1. 程式人生 > >Medoo Select的使用:查詢資料

Medoo Select的使用:查詢資料

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,官方已回覆郵件,官方對此處文件進行了修正