thinkphpの複数テーブルクエリ
thinkphpを学習する過程で複数のテーブルを操作する必要があるのですが、実際の過程では常に様々な問題に遭遇するので、自分自身の学習過程としてこのブログ記事を書きました。
操作中、2つのテーブルのクエリでは問題はありませんでしたが、3つのテーブルのクエリで問題が発生し始めました
以下の3つのテーブルがあり、サブテーブルはplテーブル(uid、content)、userテーブル(id、username)、lybテーブル(uid、title)です
複数テーブルのクエリ操作にはいくつかの方法があります:
㈠モデルを見る(推奨)
ビューモデルを定義するには、ThinkModelViewModel を継承してから viewFields プロパティを設定するだけです
コードをコピー
パブリック $viewFields = array(
~
//テーブル内に同じ名前のフィールドがある場合は、=>, 'uid'=>'lid' を使用してエイリアスを設定できます
);
コードをコピー
クエリを表示:
ビュークエリは異なるモデルのクエリと同じであり、違いはありません。
$Model = D("pl") ->field('uid,title,username,lyb_content')->select(); //pl はデータベース名です
クエリ結果に重複データがあることがわかった場合は、グループ メソッドを使用して処理することもできます。
㈡参加
JOIN メソッドもコヒーレント操作メソッドの 1 つであり、複数のテーブルの列間の関係に基づいて 2 つ以上のテーブルのデータをクエリするために使用されます。
結合には通常、次のタイプがあります。異なるタイプの結合操作は、返されるデータの結果に影響します。
INNER JOIN: テーブル内に少なくとも 1 つの一致がある場合に行を返します。JOIN と同等です
LEFT JOIN: 右側のテーブルに一致するものがない場合でも、左側のテーブルからすべての行を返します
RIGHT JOIN: 左のテーブルに一致するものがない場合でも、右のテーブルからすべての行を返します
FULL JOIN: いずれかのテーブルに一致がある限り行を返します
結合メソッドは上記の 4 つのタイプをサポートできます:
上記3つのテーブルに対して同じ操作を実行します
$Model = D("pl")
->join('lyb on pl.uid = lyb.uid')
->join('user on pl.uid = user.id')
->field('user.username,lyb.title,pl.content')
->select();
㈢テーブル
テーブルメソッドもモデルクラスのコヒーレント演算メソッドの一つで、主に演算対象のデータテーブルを指定するために使用されます。
使用方法
一般に、システムはモデルを操作するときに、現在対応するデータ テーブルを自動的に識別できるため、テーブル メソッドは通常次の目的で使用されます。
スイッチング操作のデータテーブル;
複数のテーブルに対する操作を実行します。
$Model = D("pl")
->field('pl.content,user.username,lyb.title')
->table('pl,lyb,user')
->制限(10)
->select();
注: テーブルメソッドはデフォルトですべてのフィールドの値をクエリします
http://www.bkjia.com/PHPjc/851376.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/851376.html技術記事 thinkphpのマルチテーブルクエリ thinkphpを学習する過程で複数のテーブルを操作する必要がありますが、実際の過程では必ず様々な問題に遭遇するので、自分の学習としてこのブログ記事を書きました...