Startseite
  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche
Startseite › Benutzerhandbuch › Fortgeschrittene › Tutorials & How To's - Tipps & Tricks › Kurztipps - Dinge die Stunden sparen können. ›

Kurztutorial - MySQL JOINs mit Drupal

Eingetragen von derjochenmeyer@... (517) am 27.12.2007 - 01:33 Uhr

Wer komplizierte Datenbank Abfragen braucht, kommt mit views ganz schön weit. Wenn die Daten zu einem node über viele Tabellen verteilt sind und es keine Views-Integration gibt, was dann?

Man kann JOINs nutzen. Das kann in einigen Fällen auch zu schnelleren Abfragen führen. Hie ein Beispiel:

<?php

$query
= db_query(db_rewrite_sql("SELECT
n.nid,
n.title,
n.sticky,
term_data.tid,
term_data.name,
term_data.weight,
term_hierarchy.parent,
content_type_deinTyp.field_deinFeld_fid,
files.filename,
files.filepath,
FROM {node} n
INNER JOIN content_type_deinTyp ON content_type_deinTyp.nid = n.nid
LEFT JOIN files ON content_type_deinTyp.field_deinFeld_fid = files.fid
INNER JOIN term_node ON term_node.nid = n.nid
LEFT JOIN term_data ON term_node.tid = term_data.tid
LEFT JOIN term_hierarchy ON term_hierarchy.tid = term_data.tid
WHERE n.type = 'deinTyp' AND term_data.vid = 9
ORDER BY term_hierarchy.parent, term_data.weight, term_data.name, n.sticky DESC, n.title"
));

while (
$nodes = db_fetch_object($query)) {
 
// Daten verwenden
}

?>

Verwirrt? Also Schritt für Schritt:

  • wir packen die ganze Abfrage wie gehabt in die beiden Drupal Funktionen db_query() und db_rewrite_sql() (dazu auch hier:http://www.drupalcenter.de/handbuch/6722).
  • Nach SELECT folgen alle felder die abgefragt werden sollen nach folgendem schema: tabellenname.feldname (also: n.nid, n.title, n.sticky, term_data.tid, usw.) Wenn man alles aus einer tabelle braucht geht auch tabellenname.*
  • Danach, also hinter FROM, wird angegeben wie die Tabellen verknüpft werden sollen (JOIN)
  • FROM {node} n ist die Haupttabelle sozusagen (die am weitesten links in der Abfrage steht!) -> eine Besonderheit noch: dem tabellenname {node} wird das Kürzel "n" gegeben. Damit kann man node.nid auch mit n.nid ansprechen.
  • und jetzt die JOINS. "INNER JOIN content_type_deinTyp ON content_type_deinTyp.nid = n.nid" bedeutet, dass die Tabellen content_type_deinTyp und node verknüpft werden sollen. Und zwar überall da, wo NodeID (nid) in node (n.nid) und in content_type_deinTyp (content_type_deinTyp.nid) gleich sind => "ON content_type_deinTyp.nid = n.nid"
  • So, das wars schon fast. Jetzt sollte man noch erwähnen, dass INNER JOIN bedeutet, dass nur Einträge bei der Abfrage rauskommen, die in beiden Tabellen übereinstimmende Werte in den gewünschten Feldern haben (hier die NodeID).
  • LEFT JOIN hingegen heisst, dass die Werte der linken Tabelle auf jeden Fall bei der Abfrage rauskommen und immer wenn vorhanden mit den Zeilen der Rechten Tabelle verknüpft werden. LEFT JOIN files ON content_type_deinTyp.field_deinFeld_fid = files.fid

Das nochmal weniger wortreich:

  • SELECT n.nid, usw. listet alle gewünschten Felder
  • FROM {node} n nennt die Haupttabelle
  • INNER JOIN content_type_deinTyp ON content_type_deinTyp.nid = n.nid verknüpft die node Tablle mit der zugehörigen CCK Tablle, und zwar nur da, wo in beiden Tabellen Werte vorhanden sind.
  • LEFT JOIN files ON content_type_deinTyp.field_deinBild_fid = files.fid sucht wenn vorhanden zugehörige Bilder
  • INNER JOIN term_node ON term_node.nid = n.nid sucht zugehörige Taxonomy-Terms (in der Tabelle stehen nur Zahlen)
  • LEFT JOIN term_data ON term_node.tid = term_data.tid holt die zugehörigen Term-Namen
  • LEFT JOIN term_hierarchy ON term_hierarchy.tid = term_data.tid holt zugehörige übergeordnete Terms
  • WHERE n.type = 'deinTyp' AND term_data.vid = 9 nur vom Typ "deinTyp" und wo es Terms aus Vokabular 9 gibt
  • ORDER BY term_hierarchy.parent, term_data.weight, term_data.name, n.sticky DESC, n.title" und noch vorsortieren, erst nach übergeordnetem Taxonomy-Term, dann nach Term-Gewichtung, dann Terms alphabetisch, dann erst die sticky nodes, und dann alphabetisch nach node Name.

Voll easy oder? ;) Wenn ichs wieder vergessen hab, kann ich ja hier nachschauen. Vieleicht hilfts jemandem.

‹ Korrekte Sprachversion auf Startseite mit i18n nach oben Kurztutorial - richtig SQL mit Drupal ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Held ;-)

Eingetragen von glueckskind (120)
am 25.02.2008 - 19:47 Uhr

Held ;-)

-----------------------------------
Drupal Ruhrgebiet Usergroup
http://groups.drupal.org/ruhrgebiet

  • Anmelden oder Registrieren um Kommentare zu schreiben

Tolle Erklärung

Eingetragen von grandcat (83)
am 18.09.2008 - 21:52 Uhr

Tolle Erklärung =D

-------------------------------------
Meine Entwicklungen:

www.minis-kuemmersbruck.de | www.hausmeisterteam-glaser.de

-------------------------------------
Meine Entwicklungen:

www.minis-kuemmersbruck.de | www.hausmeisterteam-glaser.de

  • Anmelden oder Registrieren um Kommentare zu schreiben
Drupal 7 Demo-Website

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Node-Speichern wird mit zunehmender Laufzeit des Servers langsam
  • Fatal error: Maximum execution time of 30 seconds exceeded in ....../includes/file.inc on line 934
  • Probleme bei der Installation von memcache
  • Treffen in Düsseldorf - 8.9. und 22.9.2010
  • [erledigt] id und klassen bei blöcken
  • Anzahl der erstellten Nodes eines bestimmten Contenttypes für bestimmte Rollen limitieren
  • Seiten kombinieren
  • Drupal Übersetzung Englisch Deutsch
  • Fragen vor Umstieg zu Drupal 6 von Joomla
  • Lightbox-2 Inputfilter
  • Kostenplfichtige Useraccounts
  • Such-Index: Problem mit ISBNs / großen Zahlen
Weiter

Neue Kommentare

  • Zum einen würde ich den
    vor 5 Stunden 22 Minuten
  • Das Aktivieren von Modulen
    vor 5 Stunden 29 Minuten
  • Lies dich mal in Ruhe ein,
    vor 5 Stunden 33 Minuten
  • Hallo, das heißt, dass Dein
    vor 5 Stunden 40 Minuten
  • danke für den tip!
    vor 6 Stunden 8 Minuten
  • Nur ein Tip, aber ich würde
    vor 6 Stunden 34 Minuten
  • Ich habe noch das Problem,
    vor 6 Stunden 29 Minuten
  • E-Fee schrieb ...Entweder man
    vor 6 Stunden 52 Minuten
  • Tja, was heiß quasi Standard?
    vor 7 Stunden 7 Minuten
  • Hallo E-Fee, nach dem was Du
    vor 7 Stunden 24 Minuten

Statistik

Beiträge im Forum: 130977
Registrierte User: 11264

Neue User:

  • BAue
  • CodeFlatter
  • michastock

» Alle User anzeigen

User nach Punkten sortiert:
quiptime4714
stBorchert4318
md3609
Tobias Bähr3607
bv3490
Alexander Langer2737
dereine2604
pebosi2490
Thoor2223
rapsli1505
» User nach Punkten
Zur Zeit sind 2 User und 25 Gäste online.

Benutzer online

  • Tobias Bähr
  • t0b1

Benutzerhandbuch

  • FAQ - Häufig gestellte Fragen.
  • Links & Downloads
  • Über Drupalcenter.de und das deutschsprachige Benutzerhandbuch
  • Über Drupal
  • Einsteiger
  • Fortgeschrittene
    • Best Practice - Drupal Sites - Guidelines
    • Die beliebtesten Themes und Module
    • Drupal Module
    • Tutorials & How To's - Tipps & Tricks
      • Kurztipps - Dinge die Stunden sparen können.
        • (nachträgliche) Multisite-Installation
        • Anmeldename im Titel von selbst erstellten Blocks (oder Menüs)
        • Bedingt Seiten von Suchmachinen ausschliessen
        • Block Titel ausblenden
        • CSS
        • Devel Modul installieren
        • E-Mail-Einstellungen für Benutzer - mehrsprachig.
        • Eigenes Template für die Sprachauswahl
        • Firebug (Firefox Add-on) benutzen!
        • Inhalt collapsibel darstellen
        • Korrekte Sprachversion auf Startseite mit i18n
        • Kurztutorial - MySQL JOINs mit Drupal
        • Kurztutorial - richtig SQL mit Drupal
        • Maximale Dateigröße für Uploads (Dateianhänge usw) vergrössern
        • Sidebar "ausblenden"
        • custom Search auf Drupal.org für Firefox
        • embedded views (mit Argumenten direkt in einer .tpl.php)
        • externe Daten als nodes importieren
        • print_r($node)
      • Notfallpläne - Tipps die Deine Drupalinstallation retten können
      • Anleitung zur Erstellung eines einfachen Kontaktformulars
      • Arbeiten mit dem Drupal Taxonomie-System [beinhaltet veraltete Inhalte]
      • Bearbeiten-Tab zu jeden Block hinzufügen
      • Block View mit Argument
      • Das Tagebuch einer Site
      • Drupal 6 - Automatisch unterschiedliche Bildgröße bei Teaser und Artikel
      • Drupal 6 - Eigene CSS Datei in ein Theme integrieren
      • Drupal 6 - Einfache Bildergalerie mit Image und Lightbox2
      • Drupal 6 - Einrichten eines Kalenders
      • Drupal 6 - Google Adsense ohne Zusatzmodul einbinden
      • Drupal 6 - Hauptnavigation mit DropDown Effekt ab Ebene Zwei
      • Drupal 6 - ImageMagick mit XAMPP Lite nutzen
      • Drupal 6 - Imagefield mit Imagecache und Colorbox
      • Drupal 6 - Installation FCK Editor
      • Drupal 6 - Installieren der WYSIWYG API inkl. Editoren
      • Drupal Theming: JavaScript einhängen in Abhängigkeit von Page-Variablen
      • Drush - Das Schweizermesser für Drupal auf Kommandozeile
      • Einfaches und erfolgreiches Patchen unter Windows
      • Eingabeformat & Inputfilter
      • Einrichten eines einfachen, statischen Menüsystems
      • Erstellen von Patches
      • Gallery mit CCK und Views erstellen (Drupal 5)
      • Gutes Tutorial für Views 1 (Drupal 5)
      • Header image Modul einrichten
      • Inhaltsübersicht für einen User mit einem View erstellen
      • Javascript und CSS-Dateien einbinden
      • Kontaktformular mit Jquery aufwerten
      • Leitfaden zur Erstellung von Suchmaschinenoptimierten Drupal-Sites
      • Module updaten via Shell auf Windows
      • Module übersetzen
      • Perl-Script zum Erzeugen einer statischen Kopie einer Drupal-Website
      • Portierung eine Themes von openwebdesign.org
      • Themen eines Node-Formulars
      • Titel mit Stil
      • Umkreissuche mit Location- und Views-Modul
      • Usergalerie mit ImageCache, CCK, Views + Thickbox
      • Userprofil mit Usernodes erstellen
      • Validierung von Usereingaben bei Nodes
      • Variation vom Showroom auf drupalcenter.de
      • View mit Eingabeformular für neue Beiträge
      • WebSVN mit Drupal Code Highlighting
      • Zusätzliche Submit-Schaltfläche in Node-Formularen
      • i18n Language Switcher Block, die Links mit den Flaggen themen
      • ui.slider als Ersatz für den Ajax-Pager von Views
      • Zugriffsbeschränkungen für Nodes - eine Übersicht der Möglichkeiten
  • Entwicklung von Modulen und Themes
  • Drupalcenters Community
  • Bücherecke
  • Drupal Screencasts auf deutsch
  • Archiv

Buchempfehlung

Das Drupal-Entwicklerhandbuch
Der Praxisleitfaden für Drupal-basierte Webprojekte.
Drupal 6
Websites entwickeln und verwalten mit dem Open Source-CMS.
Das Drupal 6 Praxisbuch
Arbeiten mit Modulen, Themes und Templates

Das Copyright des deutschsprachigen Drupal-Benutzerhandbuches unterliegt den jeweiligen Autoren. Übersetzungen des englischsprachigen Drupal-Benutzerhandbuches unterliegen der Creative Commons License, Attribution-ShareAlike 2.0.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's
  • Bücherecke

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
  • Drupal Demo
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association