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 [03.05.2015 22:52] – [Eine Seite abrufen und dazu den Namen des zuhehörenden Users] 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 37: Zeile 39:
 </code> </code>
  
-===== Eine Seite abrufen und dazu den Namen des zuhehörenden Users =====+ 
 +==== Eine Seite abrufen und dazu den Namen des zugehörenden Users ====
 //(zur Vereinfachung werden nur die SQL-Statements dargestellt.)//\\ //(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'. 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. +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.\\ 
-<code=SQL Snippet.php>+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`.*  SELECT `wb_users`.`display_name`, `wb_pages`.* 
 FROM `wb_pages` LEFT JOIN `wb_users` FROM `wb_pages` LEFT JOIN `wb_users`
     ON `wb_pages`.`modified_by`=`wb_users`.`user_id`     ON `wb_pages`.`modified_by`=`wb_users`.`user_id`
 WHERE `wb_pages`.`page_id`=1 WHERE `wb_pages`.`page_id`=1
-</code>+</file>
  
-//... wird mit Auftauchen weiterer Beispiele kontinuierlich fortgesetzt!//+FIXME //... wird mit Auftauchen weiterer Beispiele kontinuierlich fortgesetzt!//
  
dev/all/examples/sql-1.1430693555.txt.gz · Zuletzt geändert: 03.06.2015 15:55 (Externe Bearbeitung)