一、創建數據庫表和數據
在進行數據庫操作之前,我們需要先創建數據庫及相應的數據表。我們假設需要開發一個學生管理系統,其中需要建立一個名為student的數據庫表,以存儲學生的基本信息。表包含以下字段:
id:主鍵,自增長。
name:學生姓名,varchar類型,長度為20。
立即學習“PHP免費學習筆記(深入)”;
age:學生年齡,int類型。
sex:學生性別,varchar類型,長度為2。
t_score:CET-4考試成績,int類型。
total_score:學生成績總和,int類型。
我們可以使用如下的SQL語句創建該數據表:
CREATE?TABLE? student ?( ?? id ?int(11)?NOT?NULL?AUTO_INCREMENT?COMMENT?'自增ID', ?? name ?varchar(20)?NOT?NULL?DEFAULT?''?COMMENT?'學生姓名', ?? age ?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'學生年齡', ?? sex ?varchar(2)?NOT?NULL?DEFAULT?''?COMMENT?'學生性別', ?? t_score ?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'CET-4考試成績', ?? total_score ?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'學生成績總和', ??PRIMARY?KEY?( id ) )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8mb4?COMMENT='學生信息表';
我們隨機插入一些數據,用于后續測試:
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中對數據庫進行增、刪、改、查等操作。在進行查詢操作時,我們需要調用MySQL字段。以下列出了一些常用的調用方式:
1.使用數組方式直接調用:
我們可以使用數組方式來直接調用MySQL字段。查詢student表中的id、name、age等字段,可通過以下方式實現:
$studentList = Db::name(‘student’)->field([‘id’, ‘name’, ‘age’])->select();
$field參數為可選,不傳入該參數表示查詢所有字段。
2.使用字符串方式調用:
第二種方式為直接使用字符串方式調用MySQL字段,例如:
//查詢id,name和age字段
$studentList = Db::name(‘student’)->field(‘id, name, age’)->select();
//查詢t_score,total_score和總分字段(總分為t_score和total_score相加的結果)
$studentList = Db::name(‘student’)->field(‘t_score, total_score, (t_score+total_score) as score’)->select();
在使用字符串方式調用MySQL字段時,我們可以通過as為某字段別名(alias)。
3.使用模型方式調用:
使用模型方式調用時,我們需要先定義模型類。一個名為Student的模型類可以根據student表的結構進行定義
namespace appcommonmodel;
use thinkModel;
class Student extends Model
{
//定義表名和主鍵 protected?$table?=?'student'; protected?$pk?=?'id';
}
接下來,我們可以使用Student模型類直接操作查詢:
//獲取所有學生列表信息
$studentList = Student::field([‘id’, ‘name’, ‘age’])->select();
//獲取學生姓名和總分
$studentList = Student::field(‘name, (t_score+total_score) as score’)->select();
通過模型方式調用MySQL字段可以使我們的代碼更加簡潔優雅,而且能夠有效防止SQL注入問題。
三、在ThinkPHP中進行MySQL字段別名操作
在執行SQL查詢語句時,有時我們需要使用列別名作為返回結果的標識。例如,我們要在查詢結果中顯示學生姓名和比該名學生分數高的其他學生數目,我們可以添加一個別名(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方法,可以得到人名和排名,其對應的SQL語句為:
SELECT?name,?(SELECT?count(*)?FROM?student?as?b?WHERE?b.total_score>s.total_score)?as?rank?FROM?student?s
在ThinkPHP中,通過使用alias方法,我們可以為MySQL字段設置指定的別名,以達到更高效的查詢操作。