Ergebnis 1 bis 4 von 4

Thema: 4.13.x MM 2.3 Verwandte Produkte / Cross selling MM

  1. #1
    Contao-Nutzer
    Registriert seit
    02.08.2009.
    Beiträge
    67

    Standard 4.13.x MM 2.3 Verwandte Produkte / Cross selling MM

    Halli Hallo,

    ich habe ein MM Bilder. In diesem wird ein Bild gespeichert und ein Haufen Metaangaben wie Titel, Beschreibung und das übliche Tralala.

    Das funktioniert.

    Als Besonderheit, kann man dieses Bild einer Serie zuordnen. Das habe ich gelöst durch ein MM Filter Serie. In dem MM Bilder kann man diese Serien jetzt als Mehrfachauswahl (Tags) zuordnen.

    Das funktioniert auch.

    Jetzt hätte ich unter dem Bild aber gerne alle Bilder aufgelistet, die ebenfalls in der gleichen Serie sind, bis auf das Bild, auf dessen Detailseite man ja bereits ist.

    Hierfür habe ich mir ein SQL gebastelt und wie von zonky empfohlen erst einmal in phpMyAdmin ausprobiert.

    Code:
    SELECT item_id FROM tl_metamodel_tag_relation 
    WHERE att_id = 33 
    AND item_id NOT IN ( 
      SELECT mm_alias_id FROM mm_bilder 
      WHERE mm_alias = 'bild-4' )
    ;
    Auch das funktioniert und ich bekomme (in meinem Fall) genau die 5 item_id Einträge zurück, die ich auch erwartet hätte.

    Was ich allerdings nicht hinbekomme, ist die Schreibweise als Eigene SQL-Abfrage.
    Aktuell probiere ich diese Variante, aber hier werden keine Ergebnisse geliefert.
    Code:
    SELECT * 
    FROM tl_metamodel_tag_relation 
    WHERE att_id = 33 
    AND item_id NOT IN (
        SELECT mm_alias_id 
        FROM mm_bilder 
        WHERE mm_alias = {{param::get?name=auto_item}}
    )

    Weiß jemand Rat?

  2. #2
    Contao-Nutzer
    Registriert seit
    02.08.2009.
    Beiträge
    67

    Standard

    Ich habe mittlerweile folgendes SQL:
    33 ist übrigens die ID von der anderen MM Tabelle mm_filter_series

    Code:
    SELECT bilder.id FROM mm_bilder bilder
    LEFT JOIN tl_metamodel_tag_relation rel ON (bilder.id = rel.item_id)
    WHERE rel.att_id = 33 
               AND rel.value_id = (
                          SELECT value_id FROM `tl_metamodel_tag_relation` 
                          WHERE item_id = (
                                     SELECT id FROM mm_bilder 
                                     WHERE mm_alias = {{param::get?name=auto_item}}
                          ) 
                                     AND att_id = 33
              ) 
             AND bilder.mm_alias != {{param::get?name=auto_item}};

    Das scheint jetzt zu klappen, allerdings darf ich jetzt kein Multiselect mehr machen, sprich: Ich darf nur noch eine Serie angeben, da ansonsten folgender SQL Fehler kommt:

    Code:
    PDOException(code: 21000): SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row
    Geändert von whitedrow (17.12.2023 um 16:33 Uhr)

  3. #3
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Das hat primär nix mit MM zutun sondern ist SQL…

    Ein Subselect mit „=“ darf nur einen Wert zurück liefern - also zur Sicherheit immer mit „LIMIT 1“ auf einen Wert dengeln … überlegen ob das so richtig ist! ggf. auf „IN“ wechseln….

    Wie gesagt, knoble erstmal mit phpMyAdmin.

    Ich bin mir auch nicht ganz sicher, ob bei auto_item nicht der eigentliche URL-Parameter genommen werden muss.

    Guck dir die Queries im Debugmodus bei Doctrine an.

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    wenn ich das richtig aufgedröselt habe, sollte sowas i. E. reichen

    Code:
    SELECT value_id AS id FROM tl_metamodel_tag_relation
    WHERE att_id = 33
    AND item_id = (
        SELECT id FROM mm_bilder
        WHERE mm_alias = {{param::get?name=auto_item}}
        LIMIT 1
    )
    AND value_id != (
        SELECT id FROM mm_bilder
        WHERE mm_alias = {{param::get?name=auto_item}}
        LIMIT 1
    )
    Mit dem "value_id AS id" spart man sich ein Select, da in den Filterregeln immer nur ein Array an IDs weiter gereicht wird - siehe bei "oder kürzer" https://metamodels.readthedocs.io/de...-kind-elements

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •