検索
ホームページPHPフレームワークThinkPHPThinkPHP データベース操作ビュー クエリ、サブクエリ、ネイティブ クエリ

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");

現在分散データベースを使用しており、読み取りと書き込みの分離を設定している場合、クエリメソッドは常に読み取りサーバーで実行されるため、クエリメソッドは対応しますSQL ステートメントが何であるかに関係なく、これは読み取り操作です。

execute メソッド

execute は、データが次の場合、データ SQL 操作の更新と書き込みに使用されます。不正 または、クエリ エラーがある場合は false が返され、それ以外の場合は影響を受けたレコードの数が返されます。 使用例:

Db::execute("update think_user set name='thinkphp' where status=1");

現在分散データベースを使用しており、読み取りと書き込みの分離を設定している場合、execute メソッドは常に書き込みサーバーで実行されるため、execute メソッドが対応しますSQL ステートメントが何であるかに関係なく、これらはすべて書き込み操作です。

#パラメータ バインディング

#疑問符プレースホルダまたは名前付きプレースホルダを含む、ネイティブ クエリ中のパラメータ バインディングをサポートします。例:

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 サイトの他の関連記事を参照してください。

声明
この記事はcnblogsで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
ThinkPHPの組み込みテストフレームワークの主な機能は何ですか?ThinkPHPの組み込みテストフレームワークの主な機能は何ですか?Mar 18, 2025 pm 05:01 PM

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

リアルタイムの株式市場データフィードを構築するためにThinkPhpを使用する方法は?リアルタイムの株式市場データフィードを構築するためにThinkPhpを使用する方法は?Mar 18, 2025 pm 04:57 PM

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

サーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項は何ですか?サーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項は何ですか?Mar 18, 2025 pm 04:54 PM

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

ThinkPhpマイクロサービスでサービスの発見と負荷分散を実装する方法は?ThinkPhpマイクロサービスでサービスの発見と負荷分散を実装する方法は?Mar 18, 2025 pm 04:51 PM

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

ThinkPhpの依存関係噴射コンテナの高度な機能は何ですか?ThinkPhpの依存関係噴射コンテナの高度な機能は何ですか?Mar 18, 2025 pm 04:50 PM

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

リアルタイムのコラボレーションツールを構築するためにThinkPhpを使用する方法は?リアルタイムのコラボレーションツールを構築するためにThinkPhpを使用する方法は?Mar 18, 2025 pm 04:49 PM

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

SaaSアプリケーションを構築するためにThinkPhpを使用することの主な利点は何ですか?SaaSアプリケーションを構築するためにThinkPhpを使用することの主な利点は何ですか?Mar 18, 2025 pm 04:46 PM

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

ThinkPhpとRabbitmqを使用して分散タスクキューシステムを構築する方法は?ThinkPhpとRabbitmqを使用して分散タスクキューシステムを構築する方法は?Mar 18, 2025 pm 04:45 PM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

DVWA

DVWA

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

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MantisBT

MantisBT

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