ThinkPHP-Datenbankbetriebsansichtsabfrage, Unterabfrage, native Abfrage

藏色散人
Freigeben: 2021-02-03 18:48:56
nach vorne
3206 Leute haben es durchsucht

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();
Nach dem Login kopieren

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
Nach dem Login kopieren

 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();
Nach dem Login kopieren

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
Nach dem Login kopieren

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();
Nach dem Login kopieren

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
Nach dem Login kopieren

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();
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

Die generierte Unterabfrage Ergebnis ist:

SELECT `id`,`name` FROM `think_user` WHERE `id` > 10
Nach dem Login kopieren
Nach dem Login kopieren

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();
Nach dem Login kopieren

generierte Unterabfrageergebnis lautet:

SELECT `id`,`name` FROM `think_user` WHERE `id` > 10
Nach dem Login kopieren
Nach dem Login kopieren

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();
Nach dem Login kopieren
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 )
Nach dem Login kopieren
Die generierte SQL-Anweisung lautet
Db::table($subQuery.' a')    
->where('a.name','like','thinkphp')    
->order('id','desc')    
->select();
Nach dem Login kopieren
SELECT * FROM ( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 ) a WHERE a.name LIKE 'thinkphp' ORDER BY `id` desc
Nach dem Login kopieren
Die generierte SQL-Anweisung lautet
Db::table('think_user')    
->where('id','IN',function($query){        
$query->table('think_profile')->where('status',1)->field('id');
    })    
    ->select();
Nach dem Login kopieren

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 )
Nach dem Login kopieren
 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();
Nach dem Login kopieren
 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 )
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!