Heim >PHP-Framework >Denken Sie an PHP >ThinkPHP-Datenbankbetriebsansichtsabfrage, Unterabfrage, native Abfrage

ThinkPHP-Datenbankbetriebsansichtsabfrage, Unterabfrage, native Abfrage

藏色散人
藏色散人nach vorne
2021-02-02 15:25:183272Durchsuche

Die folgende Tutorial-Kolumne von thinkphp führt Sie in die Ansichtsabfrage, Unterabfrage und native Abfrage von ThinkPHP-Datenbankoperationen ein. Ich hoffe, dass sie für Freunde in Not hilfreich ist!

Ansichtsabfrage

Ansichtsabfrage kann Mehrtabellenabfragen implementieren, die nicht auf Datenbankansichten basieren, und erfordert nicht, dass die Datenbank Ansichten unterstützt:

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

Die generierte SQL-Anweisung ähnelt:

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

 Beachten Sie, dass bei der Ansichtsabfrage die Tabellen- und Join-Methoden nicht aufgerufen werden müssen. Beim Aufrufen der Where- und Order-Methoden müssen Sie nur den Feldnamen verwenden, ohne den Tabellennamen hinzuzufügen.

INNER-Join-Abfrage wird standardmäßig verwendet. Wenn Sie sie ändern müssen, können Sie Folgendes verwenden:

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

Die generierte SQL-Anweisung ähnelt:

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

Sie können einen Alias ​​verwenden:

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

Die generierte SQL-Anweisung wird :

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

Sie können eine Array-Methode verwenden, um den Tabellennamen und den Alias ​​zu definieren, zum Beispiel:

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

Die generierte SQL-Anweisung wird zu:

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

Unterabfrage

Erstellen Sie zunächst die Unterabfrage SQL Verwenden Sie die folgenden drei Methoden, um die Unterabfrage zu erstellen.

1. Verwenden Sie die Select-Methode

Wenn der Parameter der Select-Methode falsch ist, bedeutet dies, dass keine Abfrage ausgeführt wird und nur das konstruierte SQL zurückgegeben wird. Beispiel:

$subQuery = Db::table('think_user')    
->field('id,name')    
->where('id','>',10)    
->select(false);

Die generierte Unterabfrage Ergebnis ist:

SELECT `id`,`name` FROM `think_user` WHERE `id` > 10

2. Verwenden Sie die fetchSql-Methode

Die fetchSql-Methode bedeutet, dass sie nicht nur die konstruierte SQL-Anweisung zurückgibt, sondern auch alle CURD-Abfragen unterstützt. Das von

$subQuery = Db::table('think_user')    
->field('id,name')    
->where('id','>',10)    
->fetchSql(true)    
->select();

generierte Unterabfrageergebnis lautet:

SELECT `id`,`name` FROM `think_user` WHERE `id` > 10

3. Verwenden Sie buildSql, um eine Unterabfrage zu erstellen buildSql-Methode, und es generiert lediglich die SQL-Anweisung für diese Abfrage (um Verwirrung zu vermeiden, werden auf beiden Seiten der SQL Klammern hinzugefügt), und dann rufen wir sie in nachfolgenden Abfragen direkt auf.  Es ist zu beachten, dass Sie bei Verwendung der ersten beiden Methoden selbst „Klammern“ hinzufügen müssen.

Dann verwenden Sie die Unterabfrage, um eine neue Abfrage zu erstellen:

$subQuery = Db::table('think_user')    
->field('id,name')    
->where('id','>',10)    
->buildSql();
Die generierte SQL-Anweisung lautet:

4. Verwenden Sie Abschlüsse, um die Unterabfrage zu erstellen

IN/NOT IN und EXISTS/ NOT-Abfragen wie EXISTS können Abschlüsse direkt als Unterabfragen verwenden, zum Beispiel:

( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 )
Die generierte SQL-Anweisung lautet
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
Die generierte SQL-Anweisung lautet
Db::table('think_user')    
->where('id','IN',function($query){        
$query->table('think_profile')->where('status',1)->field('id');
    })    
    ->select();

Native Abfrage

Die DB-Klasse unterstützt native SQL-Abfragen Zu den Operationen gehören hauptsächlich die folgenden zwei Methoden: Abfragemethode

Abfragemethode wird zum Ausführen von SQL-Abfragevorgängen verwendet. Wenn die Daten ungültig sind oder die Abfrage falsch ist, gibt sie „false“ zurück, andernfalls gibt sie die Abfrage zurück Ergebnisdatensatz (identisch mit der Auswahlmethode). Verwendungsbeispiel:

SELECT * FROM `think_user` WHERE `id` IN ( SELECT `id` FROM `think_profile` WHERE `status` = 1 )
 Wenn Sie derzeit eine verteilte Datenbank verwenden und die Lese- und Schreibtrennung einrichten, wird die Abfragemethode immer auf dem Leseserver ausgeführt, sodass die Abfragemethode unabhängig von Ihrer SQL-Anweisung dem Lesevorgang entspricht Was ist es.

execute-Methode

execute wird für SQL-Vorgänge zum Aktualisieren und Schreiben von Daten verwendet. Wenn die Daten ungültig sind oder die Abfrage falsch ist, gibt sie „false“ zurück, andernfalls wird die Anzahl der betroffenen Datensätze zurückgegeben. Verwendungsbeispiel:

Db::table('think_user')    
->where(function($query){        
$query->table('think_profile')->where('status',1);
    },'exists')    
    ->find();
 Wenn Sie derzeit eine verteilte Datenbank verwenden und eine Lese-Schreib-Trennung einrichten, wird die Ausführungsmethode immer auf dem Schreibserver ausgeführt, sodass die Ausführungsmethode unabhängig von Ihrem SQL-Vorgang Schreibvorgängen entspricht eine Aussage.

Parameterbindung

unterstützt die Verwendung der Parameterbindung in nativen Abfragen, einschließlich Fragezeichen-Platzhaltern oder benannten Platzhaltern, zum Beispiel:

SELECT * FROM `think_user` WHERE EXISTS ( SELECT * FROM `think_profile` WHERE `status`= 1 )

Das obige ist der detaillierte Inhalt vonThinkPHP-Datenbankbetriebsansichtsabfrage, Unterabfrage, native Abfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen