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

SQL - Abfrage Join mit multivalue field

Eingetragen von Sawascwoolf (125)
am 06.07.2012 - 14:46 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x

Hallo,

Ich versuche gerade eine eigene recht komplexe SQL Abfrage auf die Beine zu stellen, leider scheitert es gerade an einer Kleinigkeit. Diese könnte ich natürlich auch in eine extra Abfrage stecken, aber ich denke es sollte auch mit nur einer Abfrage funktionieren.

Folgendes Szenario:
Beteiligte Node-types:

-Koordinaten
-Spioberichte
-Spieler

als Primäre Abfrage verwende ich Spionageberichte und mit LEFT JOINS füge ich einige weitere Infos aus dem entsprechenden Koordinaten-node und aus dem Spieler-node hinzu.

Hauptproblem:
- Spieler-node enthält ein Multivalue Feld (3 Einträge)
- diese 3 Einträge möchte ich aber gerne in einer Row des Ergebnisses haben

Nebenproblem:
- Eigentlich möchte ich nur den aktuellsten Spiobericht zu bestimmten Koordinaten haben
- Dies löse ich aktuell dann im PHP-Code

Ich nehme mal an, dass jemand schonmal vor dem gleichen Problem stand, leider konnte ich der Suche nichts entsprechendes entlocken.

Gruß
Sawascwoolf

P.s. hier noch das aktuelle Query (Tabellen-prefix: first)

SELECT
  time.field_time_value as time,
  node.nid as nid,
  holz.field_holz_value AS holz,
  wasser.field_wasser_value AS wasser,
  iri.field_iri_value AS iri,
  sauer.field_sauer_value AS sauer,
  name.title AS name,
  verteidigung.field_verteidigung_value AS verteidigung,
  punkte.field_punkte_value AS punkte,
  einheiten.field_einheiten_value AS einheiten,
  ally.field_allianz_value AS ally,
  land.field_land_value AS land,
  konti.field_kontinent_value AS konti,
  stadt.field_koords_stadt_value AS stadt,
  koords.field_verteidiger_koords_target_id AS vert_id
 
 
  FROM firstnode as node
  LEFT JOIN firstfield_data_field_holz as holz ON node.nid = holz.entity_id
  LEFT JOIN firstfield_data_field_iri AS iri ON node.nid =iri.entity_id
  LEFT JOIN firstfield_data_field_sauer AS sauer ON node.nid = sauer.entity_id
  LEFT JOIN firstfield_data_field_wasser AS wasser ON node.nid = wasser.entity_id
  LEFT JOIN firstfield_data_field_verteidiger AS verteidiger ON node.nid = verteidiger.entity_id
  LEFT JOIN firstfield_data_field_einheiten AS einheiten ON node.nid = einheiten.entity_id
  LEFT JOIN firstfield_data_field_verteidigung AS verteidigung ON node.nid = verteidigung.entity_id
  LEFT JOIN firstfield_data_field_time AS time ON node.nid = time.entity_id
  LEFT JOIN firstfield_data_field_punkte AS punkte ON node.nid = punkte.entity_id
  LEFT JOIN firstfield_data_field_verteidiger_koords AS koords ON node.nid = koords.entity_id
  LEFT JOIN firstfield_data_field_allianz AS ally ON verteidiger.field_verteidiger_target_id = ally.entity_id
  LEFT JOIN firstfield_data_field_is_friend AS friend ON verteidiger.field_verteidiger_target_id = friend.entity_id
  LEFT JOIN firstnode AS name ON verteidiger.field_verteidiger_target_id = name.nid
  LEFT JOIN firstfield_data_field_kontinent AS konti ON koords.field_verteidiger_koords_target_id = konti.entity_id
  LEFT JOIN firstfield_data_field_land AS land ON land.entity_id = koords.field_verteidiger_koords_target_id
  LEFT JOIN firstfield_data_field_koords_stadt AS stadt ON stadt.entity_id = koords.field_verteidiger_koords_target_id
  LEFT JOIN firstfield_data_field_waffentechs AS techs ON name.nid = techs.entity_id
  WHERE (node.type LIKE 'spio_bericht' AND time.field_time_value > 1341219112 AND friend.field_is_friend_value != 1  AND konti.field_kontinent_value IN (1))
  ORDER BY time.field_time_value DESC

‹ Datenabgleich Horizont erweitern ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Sawascwoolf,zu Deinem

Eingetragen von TobiasR (134)
am 09.07.2012 - 20:58 Uhr

Hallo Sawascwoolf,

zu Deinem Hauptproblem:
Wenn Du 3 Zeilen einer Tabelle in deiner Abfrage in 3 Spalten darstellen möchtest, musst Du die Tabelle 3 x mit einem Left-Join einbinden.
Bei Drupal-Fields gibt es immer noch eine Spalte delta.

Hier ein Beispiel: firstfield_data_field_einheiten enthält das multivalue-fields (kann aus deinem Text oben nicht herauslesen, um welche Tabelle es sich handelt, daher nehme ich diese). Dann musst Du wie folgt einbinden:

SELECT
...
einheiten1.field_einheiten_value AS einheiten1,
einheiten2.field_einheiten_value AS einheiten2,
einheiten3.field_einheiten_value AS einheiten3,
...
FROM firstnode as node
LEFT JOIN ...
LEFT JOIN firstfield_data_field_einheiten AS einheiten1 ON node.nid = einheiten.entity_id AND delta=0
LEFT JOIN firstfield_data_field_einheiten AS einheiten2 ON node.nid = einheiten.entity_id AND delta=1
LEFT JOIN firstfield_data_field_einheiten AS einheiten3 ON node.nid = einheiten.entity_id AND delta=2
LEFT JOIN ...
WHERE ...

Hoffe, dass ist einigermaßen verständlich...

Zu Deinem Nebenproblem:
Wie definiest Du den aktuellsten Spiobericht? Kann man mit Sicherheit auch per SQL lösen.

Grüße,
Tobias

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [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

  • Inzwischen sind wir bei
    vor 2 Tagen 13 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 3 Tagen 5 Stunden
  • melde mich mal wieder, da ich
    vor 8 Wochen 9 Stunden
  • Hey danke
    vor 8 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 8 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 3 Tagen
  • In der entsprechenden View
    vor 9 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» 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 0 User und 5 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