Benutzer-Werkzeuge

Webseiten-Werkzeuge


dev:all:examples:sql-1

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-1 [23.10.2014 09:34] Manuela v.d.Deckendev:all:examples:sql-1 [25.10.2017 12:02] (aktuell) – [Eine Seite abrufen und dazu den Namen des zugehörenden Users] Manuela v.d.Decken
Zeile 1: Zeile 1:
 ====== Der richtige Einsatz von SQL-Abfragen ====== ====== Der richtige Einsatz von SQL-Abfragen ======
 Dieses Kapitel soll häufige Fehler/Unsauberkeiten im Umgang mit Datenbanken in früheren Versionen von WB aufzeigen und auch gleich entsprechende Lösungen anbieten. Die beanstandeten Codefragmente sind **nicht** erfunden, sondern original aus WB und Modulen entnommen!  Dieses Kapitel soll häufige Fehler/Unsauberkeiten im Umgang mit Datenbanken in früheren Versionen von WB aufzeigen und auch gleich entsprechende Lösungen anbieten. Die beanstandeten Codefragmente sind **nicht** erfunden, sondern original aus WB und Modulen entnommen! 
-===== Abruf eines einzelnen Users =====+===== Verschiedene Beispiele für mehr oder weniger komplexe SQL-Abfragen ===== 
 +**Achtung:** Die folgenden Beispiele sind __**nicht**__ zur //**copy&paste**// Programmierung gedacht, sondern nur beispielhafte Denkanregungen, die aufzeigen sollen wie ein Problem gelöst werden kann! 
 +==== Abruf eines einzelnen Users ====
 Es wird einfach anhand der `user_id` ein einzelner Datensatz in der Tabelle `users` gesucht Es wird einfach anhand der `user_id` ein einzelner Datensatz in der Tabelle `users` gesucht
  
Zeile 8: Zeile 10:
 $query = $database->query("SELECT * FROM '.TABLE_PREFIX.'users WHERE user_id = $user_id LIMIT 1"); $query = $database->query("SELECT * FROM '.TABLE_PREFIX.'users WHERE user_id = $user_id LIMIT 1");
 if ($query->numRows() > 0) { if ($query->numRows() > 0) {
-    while ($user = $query->fetchRow()) {+    while ($user = $query->fetchArray(MYSQLI_ASSOC)) {
          
         // all ok, do something with the data         // all ok, do something with the data
Zeile 20: Zeile 22:
   * Das SQL-Statement entspricht nicht den SQL-Strikt Regeln und ist zusätzlich noch innerhalb der Argumentenklammer von ->query() definiert.   * Das SQL-Statement entspricht nicht den SQL-Strikt Regeln und ist zusätzlich noch innerhalb der Argumentenklammer von ->query() definiert.
   * WHILE - diese Schleife ist überflüssig, da ja maximal nur ein Datensatz geliefert wird.   * WHILE - diese Schleife ist überflüssig, da ja maximal nur ein Datensatz geliefert wird.
-  * Die Abfrage auf numRows() ist überflüssig, weil das nachfolgende fetchRow() den ersten Datensatz des Result-Objektes oder **null**, falls kein Datensatz gefunden wurde, zurückgibt.+  * Die Abfrage auf numRows() ist überflüssig, weil das nachfolgende fetchArray() den ersten Datensatz des Result-Objektes oder **null**, falls kein Datensatz gefunden wurde, zurückgibt.
  
 Nach den neuen Standards von WB korrigiert, ergibt sich dadurch folgendes [color=green]richtige[/color] Codefragment: Nach den neuen Standards von WB korrigiert, ergibt sich dadurch folgendes [color=green]richtige[/color] Codefragment:
Zeile 27: Zeile 29:
      . 'WHERE `user_id`='.$user_id;      . 'WHERE `user_id`='.$user_id;
 if (($oResult = $oDb->doQuery($sql))) { if (($oResult = $oDb->doQuery($sql))) {
-    if (($aUser = $oResult->fetchRow(MYSQL_ASSOC))) {+    if (($aUser = $oResult->fetchArray())) {
         // all ok, do something with the data now         // all ok, do something with the data now
     } else {     } else {
Zeile 38: Zeile 40:
  
  
-**//wird mit Auftauchen weiterer Beispiele kontinuierlich fortgesetzt..//**+==== Eine Seite abrufen und dazu den Namen des zugehörenden Users ==== 
 +//(zur Vereinfachung werden nur die SQL-Statements dargestellt.)//\\ 
 +Hierzu werden Daten aus zwei Tabellen benötigt: die Daten aus 'wb_pages' sowie der Benutzername aus der Tabelle 'wb_users'
 +Diese Aufgabe ist ohne jeden zusätzlichen PHP-Code rein mit **SQL** elegant lösbar. Dazu müssen nur die beiden Tabellen über die Felder 'modified_by' und 'user_id' durch einen //JOIN// miteinander verknüpft werden.\\ 
 +Es lohnt sich auf jeden Fall, sich in SQL einzulesen um die Grundlagen zu begreifen. 
 +<file sql Snippet.sql> 
 +SELECT `wb_users`.`display_name`, `wb_pages`.*  
 +FROM `wb_pages` LEFT JOIN `wb_users` 
 +    ON `wb_pages`.`modified_by`=`wb_users`.`user_id` 
 +WHERE `wb_pages`.`page_id`=1 
 +</file> 
 + 
 +FIXME //... wird mit Auftauchen weiterer Beispiele kontinuierlich fortgesetzt!//
  
dev/all/examples/sql-1.1414056882.txt.gz · Zuletzt geändert: 03.06.2015 15:55 (Externe Bearbeitung)