thinkphp の次のチュートリアル コラムでは、ThinkPHP データベース操作のビュー クエリ、サブクエリ、およびネイティブ クエリについて紹介します。
ビュー クエリ
ビュー クエリは、データベース ビューに依存せず、データベースがビューをサポートする必要のない複数テーブル クエリを実装できます。例:Db::view('User','id,name') ->view('Profile','truename,phone,email','Profile.user_id=User.id') ->view('Score','score','Score.user_id=Profile.id') ->where('score','>',80) ->select();
SELECT User.id,User.name,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User INNER JOIN think_profile Profile ON Profile.user_id=User.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80
ビュー クエリではテーブル メソッドと結合メソッドを呼び出す必要はなく、フィールド名のみを呼び出す必要があることに注意してください。 where メソッドと order メソッドを呼び出すときに使用する必要があるため、テーブル名を追加します。
INNER 結合クエリはデフォルトで使用されます。変更する必要がある場合は、次のように使用できます:Db::view('User','id,name') ->view('Profile','truename,phone,email','Profile.user_id=User.id','LEFT') ->view('Score','score','Score.user_id=Profile.id','RIGHT') ->where('score','>',80) ->select();
SELECT User.id,User.name,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User LEFT JOIN think_profile Profile ON Profile.user_id=User.id RIGHT JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80
Db::view('User',['id'=>'uid','name'=>'account']) ->view('Profile','truename,phone,email','Profile.user_id=User.id') ->view('Score','score','Score.user_id=Profile.id') ->where('score','>',80) ->select();
SELECT User.id AS uid,User.name AS account,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User INNER JOIN think_profile Profile ON Profile.user_id=User.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80
Db::view(['think_user'=>'member'],['id'=>'uid','name'=>'account']) ->view('Profile','truename,phone,email','Profile.user_id=member.id') ->view('Score','score','Score.user_id=Profile.id') ->where('score','>',80) ->select();
SELECT member.id AS uid,member.name AS account,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user member INNER JOIN think_profile Profile ON Profile.user_id=member.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80
Subquery
最初にサブクエリ SQL を構築します。構築するには次の 3 つの方法を使用できます。サブクエリ。1. select メソッドを使用します
select メソッドのパラメータが false の場合、それはノーを意味します。クエリが実行されます。構築された SQL を返します。例:$subQuery = Db::table('think_user') ->field('id,name') ->where('id','>',10) ->select(false);
SELECT `id`,`name` FROM `think_user` WHERE `id` > 10
2。fetchSql メソッドを使用します
fetchSql メソッドは、クエリを実行せず、構築された SQL ステートメントを返すだけであることを意味し、選択だけでなくすべての CURD クエリもサポートします。$subQuery = Db::table('think_user') ->field('id,name') ->where('id','>',10) ->fetchSql(true) ->select();
SELECT `id`,`name` FROM `think_user` WHERE `id` > 10
3. buildSql を使用してサブクエリを構築します
$subQuery = Db::table('think_user') ->field('id,name') ->where('id','>',10) ->buildSql();
( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 )
最初の 2 つの方法を使用する場合は、自分で「括弧」を追加する必要があることに注意してください。
次に、サブクエリを使用して新しいクエリを作成します:
Db::table($subQuery.' a') ->where('a.name','like','thinkphp') ->order('id','desc') ->select();
SELECT * FROM ( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 ) a WHERE a.name LIKE 'thinkphp' ORDER BY `id` desc
##4. クロージャを使用してサブクエリを構築する IN/NOT IN や EXISTS/NOT EXISTS などのクエリでは、クロージャをサブクエリとして直接使用できます。次に例を示します。
Db::table('think_user') ->where('id','IN',function($query){ $query->table('think_profile')->where('status',1)->field('id'); }) ->select();
生成された SQL ステートメントは
#SELECT * FROM `think_user` WHERE `id` IN ( SELECT `id` FROM `think_profile` WHERE `status` = 1 )
Db::table('think_user') ->where(function($query){ $query->table('think_profile')->where('status',1); },'exists') ->find();
生成された SQL ステートメントは
#SELECT * FROM `think_user` WHERE EXISTS ( SELECT * FROM `think_profile` WHERE `status`= 1 )
ネイティブ クエリ #Db クラスは、主に次の 2 つのメソッドを含むネイティブ SQL クエリ操作をサポートします。
##クエリ メソッド##query メソッドは、SQL クエリ操作を実行するために使用されます。データが不正であるかクエリが間違っている場合は false を返し、それ以外の場合はクエリ結果のデータ セットを返します (select メソッドと同じ)。 使用例: Db::query("select * from think_user where status=1");
execute メソッド
execute は、データが次の場合、データ SQL 操作の更新と書き込みに使用されます。不正 または、クエリ エラーがある場合は false が返され、それ以外の場合は影響を受けたレコードの数が返されます。 使用例: Db::execute("update think_user set name='thinkphp' where status=1");
#パラメータ バインディング
#疑問符プレースホルダまたは名前付きプレースホルダを含む、ネイティブ クエリ中のパラメータ バインディングをサポートします。例: Db::query("select * from think_user where id=? AND status=?",[8,1]);
// 命名绑定
Db::execute("update think_user set name=:name where status=:status",['name'=>'thinkphp','status'=>1]);
以上がThinkPHP データベース操作ビュー クエリ、サブクエリ、ネイティブ クエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。