一、創(chuàng)建數(shù)據(jù)庫表和數(shù)據(jù)
在進(jìn)行數(shù)據(jù)庫操作之前,我們需要先創(chuàng)建數(shù)據(jù)庫及相應(yīng)的數(shù)據(jù)表。我們假設(shè)需要開發(fā)一個學(xué)生管理系統(tǒng),其中需要建立一個名為student的數(shù)據(jù)庫表,以存儲學(xué)生的基本信息。表包含以下字段:
id:主鍵,自增長。
name:學(xué)生姓名,varchar類型,長度為20。
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
age:學(xué)生年齡,int類型。
sex:學(xué)生性別,varchar類型,長度為2。
t_score:CET-4考試成績,int類型。
total_score:學(xué)生成績總和,int類型。
我們可以使用如下的SQL語句創(chuàng)建該數(shù)據(jù)表:
CREATE?TABLE? student ?( ?? id ?int(11)?NOT?NULL?AUTO_INCREMENT?COMMENT?'自增ID', ?? name ?varchar(20)?NOT?NULL?DEFAULT?''?COMMENT?'學(xué)生姓名', ?? age ?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'學(xué)生年齡', ?? sex ?varchar(2)?NOT?NULL?DEFAULT?''?COMMENT?'學(xué)生性別', ?? t_score ?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'CET-4考試成績', ?? total_score ?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'學(xué)生成績總和', ??PRIMARY?KEY?( id ) )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8mb4?COMMENT='學(xué)生信息表';
我們隨機插入一些數(shù)據(jù),用于后續(xù)測試:
INSERT?INTO? student ?( name ,? age ,? sex ,? t_score ,? total_score )?VALUES?('張三',?20,?'男',?550,?750),?('李四',?19,?'女',?530,?700),?('王五',?22,?'男',?610,?820),?('趙六',?23,?'女',?590,?780),?('錢七',?21,?'男',?500,?730);
我們可以使用Db類提供的方法,在ThinkPHP中對數(shù)據(jù)庫進(jìn)行增、刪、改、查等操作。在進(jìn)行查詢操作時,我們需要調(diào)用MySQL字段。以下列出了一些常用的調(diào)用方式:
1.使用數(shù)組方式直接調(diào)用:
我們可以使用數(shù)組方式來直接調(diào)用MySQL字段。查詢student表中的id、name、age等字段,可通過以下方式實現(xiàn):
$studentList = Db::name(‘student’)->field([‘id’, ‘name’, ‘age’])->select();
$field參數(shù)為可選,不傳入該參數(shù)表示查詢所有字段。
2.使用字符串方式調(diào)用:
第二種方式為直接使用字符串方式調(diào)用MySQL字段,例如:
//查詢id,name和age字段
$studentList = Db::name(‘student’)->field(‘id, name, age’)->select();
//查詢t_score,total_score和總分字段(總分為t_score和total_score相加的結(jié)果)
$studentList = Db::name(‘student’)->field(‘t_score, total_score, (t_score+total_score) as score’)->select();
在使用字符串方式調(diào)用MySQL字段時,我們可以通過as為某字段別名(alias)。
3.使用模型方式調(diào)用:
使用模型方式調(diào)用時,我們需要先定義模型類。一個名為Student的模型類可以根據(jù)student表的結(jié)構(gòu)進(jìn)行定義
namespace appcommonmodel;
use thinkModel;
class Student extends Model
{
//定義表名和主鍵 protected?$table?=?'student'; protected?$pk?=?'id';
}
接下來,我們可以使用Student模型類直接操作查詢:
//獲取所有學(xué)生列表信息
$studentList = Student::field([‘id’, ‘name’, ‘age’])->select();
//獲取學(xué)生姓名和總分
$studentList = Student::field(‘name, (t_score+total_score) as score’)->select();
通過模型方式調(diào)用MySQL字段可以使我們的代碼更加簡潔優(yōu)雅,而且能夠有效防止SQL注入問題。
三、在ThinkPHP中進(jìn)行MySQL字段別名操作
在執(zhí)行SQL查詢語句時,有時我們需要使用列別名作為返回結(jié)果的標(biāo)識。例如,我們要在查詢結(jié)果中顯示學(xué)生姓名和比該名學(xué)生分?jǐn)?shù)高的其他學(xué)生數(shù)目,我們可以添加一個別名(alias):
$studentList?=?Db::name('student')->field('name,?(SELECT?count(*)?FROM?student?as?b?WHERE?b.total_score>s.total_score)?as?rank')->alias('s')->select();
以上代碼通過子查詢和alias方法,可以得到人名和排名,其對應(yīng)的SQL語句為:
SELECT?name,?(SELECT?count(*)?FROM?student?as?b?WHERE?b.total_score>s.total_score)?as?rank?FROM?student?s
在ThinkPHP中,通過使用alias方法,我們可以為MySQL字段設(shè)置指定的別名,以達(dá)到更高效的查詢操作。