Die Beispiele in diesem Artikel beschreiben die Betriebsmethoden der Zend Framework-Datenbank. Geben Sie es wie folgt als Referenz an alle weiter:
Beispiel:
<?php // // SELECT * // FROM round_table // WHERE noble_title = "Sir" // ORDER BY first_name // LIMIT 10 OFFSET 20 // // 你可以使用一种重复定义的方式... $select->from('round_table', '*'); $select->where('noble_title = ?', 'Sir'); $select->order('first_name'); $select->limit(10,20); // ...或者使用一种连续定义的方式: $select->from('round_table', '*') ->where('noble_title = ?', 'Sir') ->order('first_name') ->limit(10,20); // 但是,读取数据的方法相同 $sql = $select->__toString(); $result = $db->fetchAll($sql); // 对于以上任一种方式,你都可以传送$select对象本身 // 使用Zend_Db_Select对象的 __toString()方法就可以得到查询语句 $result = $db->fetchAll($select); ?>
Sie können in Ihrer Abfrageanweisung auch gebundene Parameter verwenden, ohne selbst Anführungszeichen für die Parameter hinzuzufügen.
<?php // // SELECT * // FROM round_table // WHERE noble_title = "Sir" // ORDER BY first_name // LIMIT 10 OFFSET 20 // $select->from('round_table', '*') ->where('noble_title = :title') ->order('first_name') ->limit(10,20); // 读取结果使用绑定的参数 $params = array('title' => 'Sir'); $result = $db->fetchAll($select, $params); ?>
Mehrere Datenspalten in derselben Tabelle abfragen
Wenn Sie bestimmte Spalten aus einer bestimmten Tabelle abfragen müssen, können Sie die from()-Methode verwenden, um den Tabellennamen und hinzuzufügen In dieser Methode werden die Namen der abzufragenden Spalten angegeben. Sowohl Tabellennamen als auch Spaltennamen können durch Aliase ersetzt werden, und die from()-Methode kann auch beliebig oft verwendet werden.
<?php // 创建一个$db对象,假定adapter为Mysql $select = $db->select(); // 从some_table表中读取a,b,c三列 $select->from('some_table', 'a, b, c'); // 同样可以: $select->from('some_table', array('a', 'b', 'c'); // 从foo AS bar表中读取列bar.col $select->from('foo AS bar', 'bar.col'); // 从foo, bar两个表中读取foo.col 别名为col1,bar.col别名为col2 $select->from('foo', 'foo.col AS col1'); $select->from('bar', 'bar.col AS col2'); ?>
Mehrere Tabellen-Gemeinschaftsabfrage
Wenn Sie eine Tabellen-Gemeinschaftsabfrage durchführen müssen, können Sie die Methode join() verwenden. Legen Sie zunächst den Tabellennamen für die Tabellenvereinigungsabfrage fest, dann die Bedingungen für die Tabellenvereinigung (Hinweis: Diese Bedingung gilt für interne Verknüpfungen mehrerer Tabellen) und schließlich den Spaltennamen der Abfrage. Ebenso können Sie die Methode „join()“ so oft wie nötig verwenden.
<?php // 创建一个$db对象,假定adapter为Mysql. $select = $db->select(); // // SELECT foo.*, bar.* // FROM foo // JOIN bar ON foo.id = bar.id // $select->from('foo', '*'); $select->join('bar', 'foo.id = bar.id', '*'); ?>
WHERE-Bedingung
Wenn Sie eine Where-Bedingung hinzufügen müssen, können Sie die Methode where() verwenden. Sie können eine normale Abfragezeichenfolge oder eine using?-Zeichenfolge übergeben.
<?php // 创建一个$db对象,调用SELECT方法. $select = $db->select(); // // SELECT * // FROM round_table // WHERE noble_title = "Sir" // AND favorite_color = "yellow" // $select->from('round_table', '*'); $select->where('noble_title = "Sir"'); // embedded value $select->where('favorite_color = ?', 'yellow'); // quoted value // // SELECT * // FROM foo // WHERE bar = "baz" // OR id IN("1", "2", "3") // $select->from('foo', '*'); $select->where('bar = ?', 'baz'); $select->orWhere('id IN(?)', array(1, 2, 3); ?>
GROUP BY-Klausel
Bei Bedarf kann die Methode group() mehrmals verwendet werden, um die abgefragten Daten zu gruppieren
<?php // 创建一个$db对象,调用SELECT方法. $select = $db->select(); // // SELECT COUNT(id) // FROM foo // GROUP BY bar, baz // $select->from('foo', 'COUNT(id)'); $select->group('bar'); $select->group('baz'); // 同样可以这样调用 group() 方法: $select->group('bar, baz'); // 还可以: $select->group(array('bar', 'baz')); ?>
HAVING-Bedingung
Wenn Sie den Abfrageergebnissen Have-Bedingungen hinzufügen müssen, können Sie die Methode getting() verwenden. Diese Methode hat die gleiche Funktion wie die Methode where().
Wenn Sie die Methode „having()“ mehrmals aufrufen, werden die Bedingungen jedes einzelnen „having“ für die Operation „zusammengeführt“. Wenn Sie die Operation „or“ implementieren müssen, können Sie die Methode „orHaving()“ verwenden .
<?php // 创建一个$db对象,调用SELECT方法. $select = $db->select(); // // SELECT COUNT(id) AS count_id // FROM foo // GROUP BY bar, baz // HAVING count_id > "1" // $select->from('foo', 'COUNT(id) AS count_id'); $select->group('bar, baz'); $select->having('count_id > ?', 1); ?>
ORDER BY-Klausel
Bei Bedarf können Sie die Methode order() mehrmals verwenden, um die abgefragten Daten zu sortieren
<?php // 创建一个$db对象,调用SELECT方法. $select = $db->select(); // // SELECT * FROM round_table // ORDER BY noble_title DESC, first_name ASC // $select->from('round_table', '*'); $select->order('noble_title DESC'); $select->order('first_name'); // 同样可以这样调用 order() 方法: $select->order('noble_title DESC, first_name'); // 还可以: $select->order(array('noble_title DESC', 'first_name')); ?>
Nach Gesamt- und Teilsumme LIMIT-Grenze für Verschiebungsmenge
Zend_db_select kann Limit-Anweisungseinschränkungen auf Datenbankebene unterstützen. Bei einigen Datenbanken wie MySQL und Postgresql ist die Implementierung relativ einfach, da diese Datenbanken die Syntax „limit:count“ nativ unterstützen.
Für einige andere Datenbanken, wie zum Beispiel Microsofts SQL Server und Oracle, ist es nicht so einfach, die Limit-Funktion zu implementieren, da sie selbst die Limit-Anweisung überhaupt nicht unterstützen. MS-SQL verfügt über eine Top-Anweisung zur Implementierung. Wenn Oracle jedoch die Limit-Funktion implementieren möchte, ist die Art und Weise, wie die Abfrageanweisung geschrieben wird, spezieller. Aufgrund der Art und Weise, wie zend_db_select intrinsisch funktioniert, können wir die Select-Anweisung umschreiben, um die Limit-Funktionalität des oben genannten Open-Source-Datenbanksystems in Oracle zu implementieren.
Um die zurückgegebenen Ergebnisse durch Festlegen der Gesamtzahl und des Offsets der Abfrage einzuschränken, können Sie die limit()-Methode verwenden, mit der Gesamtzahl und einem optionalen Offset als Parameter für den Aufruf dieser Methode.
<?php // 首先,一个简单的 "LIMIT :count" $select = $db->select(); $select->from('foo', '*'); $select->order('id'); $select->limit(10); // // 在mysql/psotgreSql/SQLite,可以得到这样的语句: // // SELECT * FROM foo // ORDER BY id ASC // LIMIT 10 // // 但是在Microsoft SQL下,可以得到这样的语句: // // SELECT TOP 10 * FROM FOO // ORDER BY id ASC // // // 现在, 是更复杂的 "LIMIT :count OFFSET :offset"方法 $select = $db->select(); $select->from('foo', '*'); $select->order('id'); $select->limit(10, 20); // // 在mysql/psotgreSql/SQLite,可以得到这样的语句: // // SELECT * FROM foo // ORDER BY id ASC // LIMIT 10 OFFSET 20 // // 但是在Microsoft SQL下,由于不支持偏移量功能,可以得到这样sql语句: // // SELECT * FROM ( // SELECT TOP 10 * FROM ( // SELECT TOP 30 * FROM foo ORDER BY id DESC // ) ORDER BY id ASC // ) // // Zend_Db_Adapter 可以自动的完成sql语句的动态创建. // ?>
LIMIT-Limit nach Seitenzahl und Gesamtzahl
Zend_db_select bietet auch eine Funktion zur Seitenumblätterbegrenzung. Wenn Sie aus den Ergebnissen eine bestimmte „Anzahl von Seiten“ ermitteln möchten, übergeben Sie einfach den benötigten Seitenwert und die Anzahl der auf jeder Seite angezeigten Datenwerte als Parameter.
<?php // 构造基础的select方法: $select = $db->select(); $select->from('foo', '*'); $select->order('id'); // ... 限制到第三页,每页包括10行数据 $select->limitPage(3, 10); // // 在MySQL/PostgreSQL/SQLite下, 可以得到: // // SELECT * FROM foo // ORDER BY id ASC // LIMIT 10 OFFSET 20 // ?>
Ich hoffe, dass dieser Artikel für jedermann bei der PHP-Programmierung auf Basis des Zend Framework-Frameworks hilfreich sein wird.
Weitere Beispiele für Zend Framework-Datenbankbetriebsmethoden und zusammenfassende Artikel finden Sie auf der chinesischen PHP-Website!