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 (1559)
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

  • [Gelöst] Menü wie hier samsung.com/de/ wie, mit Drupal?
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Казино с минимальным депозитом
    vor 3 Stunden 40 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 40 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 42 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 43 Minuten
  • Казино с минимальным депозитом
    vor 3 Stunden 44 Minuten
  • melde mich mal wieder, da ich
    vor 2 Wochen 4 Tagen
  • Hey danke
    vor 2 Wochen 5 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 3 Tagen
  • Da scheint die Terminologie
    vor 3 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250238
Registrierte User: 20454

Neue User:

  • Znogsnernoimb
  • ByteScrapers
  • Mroppoofpaync

» Alle User anzeigen

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

Benutzer online

  • caw

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