Benutzer-Werkzeuge

Webseiten-Werkzeuge


dev:all:examples:sql

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dev:all:examples:sql [13.03.2017 10:00] – [INSERT / UPDATE] Manuela v.d.Deckendev:all:examples:sql [27.10.2017 10:16] (aktuell) – [SELECT] Manuela v.d.Decken
Zeile 9: Zeile 9:
 Das ist schon <del>fast</del> ein ganzes Kapitel für sich. Das ist schon <del>fast</del> ein ganzes Kapitel für sich.
 Also am besten erst ein mal die grundlegensten Regeln: Also am besten erst ein mal die grundlegensten Regeln:
-  * Statements dürfen nicht in der Argumentenklammer einer Funktion/Methode erstellt werden. +  * Statements **dürfen nicht** in der Argumentenklammer einer Funktion/Methode erstellt werden. 
-  * Statements müssen grundsätzlich im SQL-Strikt-Syntax aufgebaut werden +  * Statements **müssen** grundsätzlich im SQL-Strikt-Syntax aufgebaut werden 
-    * alle SQL Schlüsselwörter müssen in Großbuchstaben geschrieben werden. +    * alle SQL Schlüsselwörter **müssen** in Großbuchstaben geschrieben werden. 
-    * alle Feld- und Tabellennamen müssen in **`**Backticks**`** eingeschlossen werden. +    * alle Feld- und Tabellennamen **müssen** in **`**Backticks**`** eingeschlossen werden. 
-  * Statements dürfen nicht mit **”**text**”**, sondern ausschließlich mit **'**text**'** begrenzt werden. Wird innerhalb des Strings ein Apostroph **'** benötigt, so ist dieser mit einem Backslash **\'** zu maskieren. +  * Statements **dürfen nicht** mit **”**Anführungszeichen**”**, sondern ausschließlich mit **'**Apostroph**'** begrenzt werden. Wird innerhalb des Strings ein Apostroph **'** benötigt, so ist dieser mit einem Backslash **\'** zu maskieren. 
-SQL-Statements sollten auch optisch so aufgebaut werden, dass sie problemlos und schnell gelesen und erfasst werden können. Die zeilenweise Aufteilung nach Action-Schlüsselwörtern ist an der Stelle sehr sinnvoll. Ist eine Zeile zu lang (Codingstandards) dann mit Einrückung auf mehrere Zeilen verteilen. Bei der Feldauswahl im SELECT-Bereich ist zu beachten, dass der Server komplette Datensätze (SELECT *) in der Regel deutlich schneller liefern kann, als eine lange Auswahlliste von einzelnen Feldern.+SQL-Statements **sollten** auch optisch so aufgebaut werden, dass sie problemlos und schnell gelesen und erfasst werden können. Die zeilenweise Aufteilung nach Action-Schlüsselwörtern ist an der Stelle sehr sinnvoll. Ist eine Zeile zu lang (Codingstandards) dann mit Einrückung auf mehrere Zeilen verteilen. Bei der Feldauswahl im SELECT-Bereich ist zu beachten, dass der Server komplette Datensätze (SELECT *) in der Regel deutlich schneller liefern kann, als eine lange Auswahlliste von einzelnen Feldern.
 Um den Aufbau von Statements zu demonstrieren, folgen einige Beispiele der wichtigsten Abfragetypen. Um den Aufbau von Statements zu demonstrieren, folgen einige Beispiele der wichtigsten Abfragetypen.
 ---- ----
Zeile 21: Zeile 21:
 Alle vier Beispiele geben jeweils ein Result-Objekt mit allen Datensätzen der zum aktuellen Zeitpunkt sichtbaren Sections einer Seite zurück. Alle vier Beispiele geben jeweils ein Result-Objekt mit allen Datensätzen der zum aktuellen Zeitpunkt sichtbaren Sections einer Seite zurück.
 <code php Beispiel-1.php>  <code php Beispiel-1.php> 
-$oResult = $oDb->doQuery("SELECT section_id, page_id, position, module, block, publ_start, publ_end FROM ".TABLE_PREFIX."sections where page_id= $iPageId and (publ_start = 0 OR publ_start <= $iTimestamp ) and (publ_end = 0 OR publ_end >= $iTimestamp ) order by block, position");+$oResult = $oDb->doQuery("SELECT section_id, page_id, position, module, block, publ_start, publ_end FROM ".TABLE_PREFIX."sections where page_id= $iPageId and ('.time().' BETWEEN `publ_start` AND `publ_end) order by block, position");
 </code> </code>
 <code php Beispiel-2.php>  <code php Beispiel-2.php> 
 $sql  = 'SELECT `section_id`, `page_id`, `position`, `module`, `block`, `publ_start`, `publ_end` FROM `'.$oDb->TablePrefix.'sections` '; $sql  = 'SELECT `section_id`, `page_id`, `position`, `module`, `block`, `publ_start`, `publ_end` FROM `'.$oDb->TablePrefix.'sections` ';
-$sql .= 'WHERE `page_id`='.$iPageId.' AND (`publ_start`=0 OR `publ_start`<='.$iTimestamp.') AND (`publ_end`=0 OR `publ_end`>='.$iTimestamp.') ';+$sql .= 'WHERE `page_id`='.$iPageId.' AND ('.time().' BETWEEN `publ_startAND `publ_end) ';
 $sql .= 'ORDER BY `block`, `position`'; $sql .= 'ORDER BY `block`, `position`';
 $oResult = $oDb->doQuery($sql); $oResult = $oDb->doQuery($sql);
Zeile 34: Zeile 34:
      . 'FROM `'.$oDb->TablePrefix.'sections` '      . 'FROM `'.$oDb->TablePrefix.'sections` '
      . 'WHERE `page_id`='.$iPageId.' '      . 'WHERE `page_id`='.$iPageId.' '
-            'AND (`publ_start`=0 OR `publ_start`<='.$iTimestamp.'+            'AND ('.time().' BETWEEN `publ_startAND `publ_end) '
-            'AND (`publ_end`=0 OR `publ_end`>='.$iTimestamp.') '+
      . 'ORDER BY `block`, `position`';      . 'ORDER BY `block`, `position`';
 $oResult = $oDb->doQuery($sql);      $oResult = $oDb->doQuery($sql);     
Zeile 42: Zeile 41:
 $sql = 'SELECT * FROM `'.$oDb->TablePrefix.'sections` ' $sql = 'SELECT * FROM `'.$oDb->TablePrefix.'sections` '
      . 'WHERE `page_id`='.$iPageId.' '      . 'WHERE `page_id`='.$iPageId.' '
-            'AND (`publ_start`=0 OR `publ_start`<='.$iTimestamp.'+            'AND ('.time().' BETWEEN `publ_startAND `publ_end) '
-            'AND (`publ_end`=0 OR `publ_end`>='.$iTimestamp.') '+
      . 'ORDER BY `block`, `position`';      . 'ORDER BY `block`, `position`';
 $oResult = $oDb->doQuery($sql);      $oResult = $oDb->doQuery($sql);     
 </code>Zur Auflockerung eine kleine Quiz-Frage:\\ </code>Zur Auflockerung eine kleine Quiz-Frage:\\
 Welche Beispiele lassen sich leichter lesen, verstehen und bei Bedarf auch leichter ändern? **1**&**2**  oder **3**&**4** ?? Welche Beispiele lassen sich leichter lesen, verstehen und bei Bedarf auch leichter ändern? **1**&**2**  oder **3**&**4** ??
 +</code>
 ---- ----
  
Zeile 79: Zeile 78:
 <code php insert-02.php> <code php insert-02.php>
 $sql = 'INSERT INTO `'.$oDb->TablePrefix.'users` ' $sql = 'INSERT INTO `'.$oDb->TablePrefix.'users` '
-     . 'SET `group_id`='.$group_id.', '+     . 'SET `group_id`='.(int)$group_id.', '
          '`groups_id`=\''.$oDb->escapeString($groups_id).'\'`, '          '`groups_id`=\''.$oDb->escapeString($groups_id).'\'`, '
          '`active`='.($active ? 1 : 0).', '          '`active`='.($active ? 1 : 0).', '
Zeile 87: Zeile 86:
          '`home_folder`=\''.$oDb->escapeString($home_folder).'\', '          '`home_folder`=\''.$oDb->escapeString($home_folder).'\', '
          '`email`=\''.$oDb->escapeString($email).'\', '          '`email`=\''.$oDb->escapeString($email).'\', '
-         '`timezone`='.(int)-72000.', '+         '`timezone`='.-72000.', '
          '`language`=\''.$oDb->escapeString($default_language).'\'';          '`language`=\''.$oDb->escapeString($default_language).'\'';
 </code> </code>
Zeile 95: Zeile 94:
      . 'SET `display_name`=\''.$oDb->escapeString($sNewDisplayName).'\', '      . 'SET `display_name`=\''.$oDb->escapeString($sNewDisplayName).'\', '
          '`active`=1 '          '`active`=1 '
-     . 'WHERE `user_id`='.$iUserId;+     . 'WHERE `user_id`='.(int)$iUserId;
 </code>Ein großer Vorteil der SET-Methode ist neben der Übersichtlichkeit und der leichten Änderbarkeit, der Umstand, dass auf die Reihenfolge der Felder keine Rücksicht genommen werden muss. Es genügt einfach, dass alle benötigten Felder vorhanden sind. Diese Vorteile wiegen weit stärker als die dafür zusätzlich benötigte Zahl an Zeilen. </code>Ein großer Vorteil der SET-Methode ist neben der Übersichtlichkeit und der leichten Änderbarkeit, der Umstand, dass auf die Reihenfolge der Felder keine Rücksicht genommen werden muss. Es genügt einfach, dass alle benötigten Felder vorhanden sind. Diese Vorteile wiegen weit stärker als die dafür zusätzlich benötigte Zahl an Zeilen.
 ---- ----
dev/all/examples/sql.1489399252.txt.gz · Zuletzt geändert: 13.03.2017 10:00 von Manuela v.d.Decken