Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Problem mit LEFT JOIN in Select-Abfrage

Eingetragen von Micha1111 (290)
am 08.01.2010 - 22:39 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Ich habe in einem eigenen kleinen Modul eine Abfrage mit folgendem Code erstellt:

$ergebnis=db_query("SELECT field_jbln_runde_value as runde,field_jbln_mheim_nid as teamh,field_jbln_mgast_nid as teamg,field_jbln_mergebnis_value as merg,theim.field_jbln_mname_value as tnameh,tgast.field_jbln_mname_value as tnameg,paar.nid AS paarnid
FROM content_type_jbln_mannschaften as theim,content_type_jbln_mannschaftspaarungen as paar,content_type_jbln_mannschaften as tgast, node, content_type_jbln_spieltage as spieltage, content_type_jbln_mannschaftsergebnisse as mergebnisse
WHERE paar.nid = {node}.vid AND paar.field_jbln_mheim_nid = theim.nid AND paar.field_jbln_mgast_nid = tgast.nid AND paar.field_jbln_paarergebnis_nid = mergebnisse.nid AND paar.field_jbln_rundennr_nid = spieltage.nid AND (paar.field_jbln_mheim_nid = $arg OR paar.field_jbln_mgast_nid = $arg)
ORDER BY runde ASC"
)

Mit dieser Abfrage werden anschließend Paarungen einer Liga mit den Ergebnissen dargestellt.
Leider werden nur die Paarungen von der Abfrage erfasst, für die es auch tatsächlich schon ein Ergebnis gibt.
Ich möchte aber alle schon vorhandenen Paarungen darstellen.

Soweit ich es recherchieren konnte, muss ich die Abfrage irgendwie auch eine LEFT JOIN - Beziehung zwischen der Tabelle jbln_mannschaftspaarungen und der Tabelle jbln_mannschaftsergebnisse umstellen. Der Rest soll aber so bestehen bleiben.

Daran bin ich aber bisher gescheitert.
Wäre nett, wenn jemand eine spontane Lösung hätte.

‹ Formular mit ahah, drupal_set_cache tut nichts [gelöst] Menuitem entfernen beim Inhalterstellen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich glaube der Fehler liegt

Eingetragen von Cyberschorsch (782)
am 09.01.2010 - 02:07 Uhr

Ich glaube der Fehler liegt im Join mit der Ergebnistabelle. Wenn du alle Paare haben willst, dann lass doch den join mit der ergebnistabelle weg.
Allgemein finde ich deinen Schreibstil sehr unübersichtlich und der macht es leider etwas schwer damit zu arbeiten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hier die Ausgabe mal

Eingetragen von Sense (1560)
am 20.01.2010 - 11:46 Uhr

Hier die Ausgabe mal formatiert:

<?php
$sql
= db_query(
 
"SELECT
     field_jbln_runde_value as runde,
     field_jbln_mheim_nid as teamh,
     field_jbln_mgast_nid as teamg,
     field_jbln_mergebnis_value as merg,
     theim.field_jbln_mname_value as tnameh,
     tgast.field_jbln_mname_value as tnameg,
     paar.nid AS paarnid

   FROM
     content_type_jbln_mannschaften as theim,
     content_type_jbln_mannschaftspaarungen as paar,
     content_type_jbln_mannschaften as tgast,
     node,
     content_type_jbln_spieltage as spieltage,
     content_type_jbln_mannschaftsergebnisse as mergebnisse

   WHERE
     paar.nid = {node}.vid AND
     paar.field_jbln_mheim_nid = theim.nid AND
     paar.field_jbln_mgast_nid = tgast.nid AND
     paar.field_jbln_paarergebnis_nid = mergebnisse.nid AND
     paar.field_jbln_rundennr_nid = spieltage.nid AND
     (paar.field_jbln_mheim_nid =
$arg OR paar.field_jbln_mgast_nid = $arg)

   ORDER BY runde ASC"
);

$result = db_query($sql);
?>

Deine Art zu programmieren ist nicht wirklich drupalkonform, "$arg" direkt in die SQL Abfrage zu packen bietet Möglichkeiten von SQL Injections, wenn hier Parameter vom User übergeben werden, Du solltest "$arg" durch "'%s'" (mit den einfachen Anführungszeichen übernehmen) und diese in "db_query" einbinden.

<?php
(paar.field_jbln_mheim_nid = '%s' OR paar.field_jbln_mgast_nid = '%s')
?>

<?php
$result
= db_query($sql, $arg, $arg);
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe das Query mal kurz

Eingetragen von bspellmeyer (37)
am 20.01.2010 - 12:12 Uhr

Ich habe das Query mal kurz mit LEFT JOINs umgebaut und gleichzeitig an die Drupal Datenbank API angepasst:

SELECT
   field_jbln_runde_value AS runde,
   field_jbln_mheim_nid AS teamh,
   field_jbln_mgast_nid AS teamg,
   field_jbln_mergebnis_value AS merg,
   theim.field_jbln_mname_value AS tnameh,
   tgast.field_jbln_mname_value AS tnameg,
   paar.nid AS paarnid

FROM
  {content_type_jbln_mannschaftspaarungen} paar
LEFT JOIN
  {content_type_jbln_mannschaften} theim ON paar.field_jbln_mheim_nid = theim.nid
LEFT JOIN
  {content_type_jbln_mannschaften} tgast ON paar.field_jbln_mgast_nid = tgast.nid
LEFT JOIN
  {content_type_jbln_spieltage} spieltage ON paar.field_jbln_rundennr_nid = spieltage.nid
LEFT JOIN
  {content_type_jbln_mannschaftsergebnisse} mergebnisse ON paar.field_jbln_paarergebnis_nid = mergebnisse.nid
LEFT JOIN
  {node} ON paar.nid = {node}.vid

WHERE
  paar.field_jbln_mheim_nid = %d OR paar.field_jbln_mgast_nid = %d

ORDER BY runde ASC

Du solltest dir unbedingt auch die Drupal Datenbank API für eine Beschreibung der Platzhalter (%d) ansehen: http://api.drupal.org/api/group/database/6

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zunächst vielen Dank für

Eingetragen von Micha1111 (290)
am 20.01.2010 - 19:53 Uhr

Zunächst vielen Dank für die Antworten und Tipps.
Es funktioniert jetzt so, so wie ich es mir vorgestellt habe und bedeutet für mich, dass Drupal 6 also grundsätzlich für mein Projekt in Frage kommmt. Jetzt geht es an die korrekte Umsetzung.

Eure Hinweise auf die Verwendung der Platzhalter für die Argumente, damit keine Schlumis Mist machen, werde ich nun versuchen umzusetzen.

Muss man das eigentlich auch beherzigen, wenn die Argumente ausschließlich aus einer node-inhaltstyp.tpl.php kommen (so rufe ich die Funktionen meines eigenen kleinen Moduls auf) und der user nichts einzugeben hat ?
Ich übergebe nur die nid des betreffenden aktuellen nodes
Alle nodes sind automatisch verlinkt, ohne dass der user etwas eingeben muss
Das einzig mögliche scheint mir zu sein, dass jemand versucht irgendwie über die url-eingabe zu manipulieren.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
Weiter

Neue Kommentare

  • Was für einen Server benutzt
    vor 4 Tagen 11 Stunden
  • Wenn die Subdomain auf
    vor 6 Tagen 9 Stunden
  • ordnerstruktur
    vor 6 Tagen 20 Stunden
  • Die Subdomain muß auf den
    vor 1 Woche 2 Tagen
  • Verwende doch das Tag dafür,
    vor 4 Wochen 4 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 3 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 3 Tagen
  • Ich habe ja keine Angst vor
    vor 5 Wochen 6 Tagen
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 6 Wochen 1 Tag
  • Vielen Dank erst einmal, aber
    vor 6 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250289
Registrierte User: 20513

Neue User:

  • Scottteday
  • MichaelPeeno
  • Pavlotog

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 18 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Ü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

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
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association