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();生成される SQL ステートメントは次のようになります:
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();生成される SQL ステートメントは次のようになります:
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();生成される SQL ステートメントは次のようになります。
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();生成される SQLステートメントは次のようになります:
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 )buildSql メソッドを呼び出した後、実際のクエリ操作は実行されませんが、クエリの SQL ステートメントのみが生成されます (混乱を避けるため、括弧内はSQL の両側に追加されます)、後続のクエリで直接呼び出します。
最初の 2 つの方法を使用する場合は、自分で「括弧」を追加する必要があることに注意してください。
次に、サブクエリを使用して新しいクエリを作成します:
Db::table($subQuery.' a') ->where('a.name','like','thinkphp') ->order('id','desc') ->select();生成される SQL ステートメントは次のとおりです:
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 サイトの他の関連記事を参照してください。

この記事では、ThinkPHPの組み込みテストフレームワークについて説明し、ユニットや統合テストなどの主要な機能と、早期のバグ検出とコード品質の向上を通じてアプリケーションの信頼性を高める方法について強調しています。

記事では、リアルタイムの株式市場データフィードにThinkPhpを使用して、セットアップ、データの正確性、最適化、セキュリティ対策に焦点を当てて説明します。

この記事では、パフォーマンスの最適化、ステートレス設計、セキュリティに焦点を当てたサーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項について説明します。コスト効率やスケーラビリティなどの利点を強調しますが、課題にも対処します

この記事では、セットアップ、ベストプラクティス、統合方法、および推奨ツールに焦点を当てたThinkPhpマイクロサービスにサービスの発見と負荷分散の実装について説明します。[159文字]。

ThinkPHPのIOCコンテナは、PHPアプリで効率的な依存関係管理のための怠zyなロード、コンテキストバインディング、メソッドインジェクションなどの高度な機能を提供します。

この記事では、ThinkPhpを使用してリアルタイムのコラボレーションツールを構築し、セットアップ、Websocket統合、セキュリティベストプラクティスに焦点を当てて説明します。

ThinkPhpは、軽量のデザイン、MVCアーキテクチャ、および拡張性を備えたSaaSアプリに利益をもたらします。スケーラビリティを向上させ、開発を速め、さまざまな機能を通じてセキュリティを改善します。

この記事では、ThinkPhpとRabbitMQを使用して分散タスクキューシステムの構築を概説し、インストール、構成、タスク管理、およびスケーラビリティに焦点を当てています。重要な問題には、Immedのような一般的な落とし穴を避けるための高可用性の確保が含まれます


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

メモ帳++7.3.1
使いやすく無料のコードエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
