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 - 21: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 - 01: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 - 10: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 - 11: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 - 18: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

  • gepatchte PHP Version 7.4 für Windows
  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
Weiter

Neue Kommentare

  • Muss ja nicht genau php 8.3 sein
    vor 2 Tagen 22 Stunden
  • Guten morgen und Danke
    vor 3 Tagen 5 Stunden
  • Evtl. versuchen auf PHP 8 zu wechseln
    vor 3 Tagen 11 Stunden
  • Danke Schmittrich. Die Frage
    vor 5 Tagen 3 Stunden
  • Keine Antwort auf die Frage nach dem Woher
    vor 5 Tagen 6 Stunden
  • Danke ich werde mir die
    vor 6 Wochen 2 Tagen
  • Vielen Dank für Ihren
    vor 6 Wochen 5 Tagen
  • Composer ist sehr ratsam
    vor 7 Wochen 16 Stunden
  • Vielen Dank für den
    vor 7 Wochen 3 Tagen
  • Die alten CMS Vergleiche von contentmanager.de
    vor 7 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250323
Registrierte User: 20571

Neue User:

  • alxshell
  • AnthonyhoF
  • Philiphelve

» 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 12 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