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

ThinkPHP データベース操作ビュー クエリ、サブクエリ、ネイティブ クエリ

Feb 02, 2021 pm 03:25 PM
thinkphp

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

thinkphpプロジェクトの実行方法 thinkphpプロジェクトの実行方法 Apr 09, 2024 pm 05:33 PM

ThinkPHP プロジェクトを実行するには、Composer をインストールし、Composer を使用してプロジェクトを作成し、プロジェクト ディレクトリに入り、php bin/consoleserve を実行し、http://localhost:8000 にアクセスしてようこそページを表示する必要があります。

thinkphp にはいくつかのバージョンがあります thinkphp にはいくつかのバージョンがあります Apr 09, 2024 pm 06:09 PM

ThinkPHP には、さまざまな PHP バージョン向けに設計された複数のバージョンがあります。メジャー バージョンには 3.2、5.0、5.1、および 6.0 が含まれますが、マイナー バージョンはバグを修正し、新機能を提供するために使用されます。最新の安定バージョンは ThinkPHP 6.0.16 です。バージョンを選択するときは、PHP バージョン、機能要件、コミュニティ サポートを考慮してください。最高のパフォーマンスとサポートを得るには、最新の安定バージョンを使用することをお勧めします。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

laravelとthinkphpではどちらが優れていますか? laravelとthinkphpではどちらが優れていますか? Apr 09, 2024 pm 03:18 PM

Laravel フレームワークと ThinkPHP フレームワークのパフォーマンスの比較: ThinkPHP は、最適化とキャッシュに重点を置いて、一般に Laravel よりもパフォーマンスが優れています。 Laravel は優れたパフォーマンスを発揮しますが、複雑なアプリケーションの場合は、ThinkPHP の方が適している可能性があります。

開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法 開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法 Nov 22, 2023 pm 12:01 PM

「開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法」 インターネット技術の急速な発展に伴い、Web アプリケーションには、多数の同時リクエストと複雑なビジネス ロジックを処理するための要件が​​ますます高まっています。システムのパフォーマンスとユーザー エクスペリエンスを向上させるために、開発者は多くの場合、電子メールの送信、ファイルのアップロードの処理、レポートの生成など、時間のかかる操作を実行するために非同期タスクの使用を検討します。 PHP の分野では、人気のある開発フレームワークとして ThinkPHP フレームワークが、非同期タスクを実装するための便利な方法をいくつか提供しています。

thinkphpのインストール方法 thinkphpのインストール方法 Apr 09, 2024 pm 05:42 PM

ThinkPHP のインストール手順: PHP、Composer、および MySQL 環境を準備します。 Composer を使用してプロジェクトを作成します。 ThinkPHP フレームワークと依存関係をインストールします。データベース接続を構成します。アプリケーションコードを生成します。アプリケーションを起動し、http://localhost:8000 にアクセスします。

thinkphpのパフォーマンスはどうですか? thinkphpのパフォーマンスはどうですか? Apr 09, 2024 pm 05:24 PM

ThinkPHP は、キャッシュ メカニズム、コードの最適化、並列処理、データベースの最適化などの利点を備えた高性能 PHP フレームワークです。公式パフォーマンステストでは、1秒あたり10,000以上のリクエストを処理できることが示されており、実際のアプリケーションではJD.comやCtripなどの大規模なWebサイトやエンタープライズシステムで広く使用されています。

ファイル転送機能を実現するThinkPHP6とSwooleをベースとしたRPCサービス ファイル転送機能を実現するThinkPHP6とSwooleをベースとしたRPCサービス Oct 12, 2023 pm 12:06 PM

ThinkPHP6 と Swoole をベースとした RPC サービスがファイル転送機能を実装 はじめに: インターネットの発展に伴い、ファイル転送は私たちの日常業務においてますます重要になってきています。この記事では、ファイル転送の効率化とセキュリティを向上させるために、ThinkPHP6とSwooleをベースとしたファイル転送機能を実現するRPCサービスの具体的な実装方法を紹介します。 WebフレームワークとしてThinkPHP6を使用し、SwooleのRPC機能を利用してサーバー間のファイル転送を実現します。 1. 環境基準

See all articles