jpee
I'm new here

<Query> Notation und Anzahl an Relationen

Hallo Community,

in FirstSpirit gibt es die Möglichkeit ganz komfortabel Abfragen auf Datenquellen zu erstellen. Dies kann man zum einen über Zusammenklicken tun oder aber mit der XML-Notation. Wir haben in unserem Projekt 2 Datenquellen, einmal Artikel und zum anderen Schlagworte. Zwischen diesen gibt es eine n:m Beziehung. Gibt es eine Möglichkeit einen Filter so zu konfigurieren, dass alle Artikel ausgegeben werden, die genau 1 Schlagwort besitzen, unabhängig davon welchen Wert dieses besitzt.

Beispiel:

<QUERY entityType="artikelPool">

    <FILTERPARAM parameter="schlagwort1" datatype="java.lang.String"/>

    <AND>

        <EQ attribute="schlagworte.schlagwort" parameter="schlagwort1"/>

    </AND>

</QUERY>

Diese Abfrage gibt einen Artikel aus, der ein bestimmtes Schlagwort besitzt. Was wir benötigen ist etwas in der Art wie dieses:

<QUERY entityType="artikelPool">

    <FILTERPARAM parameter="schlagwortanzahl" datatype="java.lang.Integer"/>

    <AND>

        <EQ attribute="schlagworte.size" parameter="schlagwortanzahl"/>

    </AND>

</QUERY>

Weiß jemand rat? Oder lässt sich dies über die XML-Notation nicht erreichen?

Viele Grüße aus Leipzig

Johannes Perlet

0 Kudos
5 Replies
jpee
I'm new here

Hallo nochmal,

weiß Niemand rat? Bleibt wohl nur die Möglichkeit eine Ausgabe über einen Ausgabekanal zu entwickeln. Innerhalb dieser kann man bequem die Anzahl von Schlagworten von jedem Artikel ermitteln.

$CMS_VALUE(artikel.schlagworte.size)$

Dafür müsste jedoch der Redakteur mit 2 Ansichten arbeiten. Mit einem Datenfilter könnte er bequem in diese rein navigieren.

Johannes

0 Kudos
feddersen
Community Manager

Mir fällt auch keine bessere Möglichkeit ein. Eventuell wäre

<EQ attribute="schlagworte.size" parameter="schlagwortanzahl"/>

einen Feature-Request wert, was aber kurzfristig natürlich nicht hilft.

0 Kudos

Eventuell wäre
<EQ attribute="schlagworte.size" parameter="schlagwortanzahl"/>



einen Feature-Request wert


Der Meinung bin ich nicht. Zunächst wäre da nicht eindeutig, ob "size" ein Attribut oder eben die Anzahl bezeichnet. Und falls ein SQL-Statement dafür formulierbar ist, ergibt das bestimmt keine performante Abfrage.

Peter
0 Kudos

Danke für die Antworten. Eine SQL-Formulierung würde in etwa wie folgt aussehen:

select arti_fs_id from rt_artikelpool_schlagworte_schlagworte2artikelpool

where fs_valid_to = '9223372036854775807'

group by arti_fs_id

having count(schl_fs_id) = 1

(Abfragegeschwindigkeit unter 1 Sekunde, bei 100000 Einträgen in der Beziehungstabelle)

Performance hin oder her, Sinn macht eine solche Anforderung schon z.B. für Shops mit 2 Tabellen Angebot und Produkt, wenn man z.B. alle Produkte haben will, zu denen es genau 1 Angebot oder mindestens 2,3 usw. Angebote gibt.

Zusatz:

Ich bin auch für andere Syntaxformulierungen offen, die zu einem gleichen Ergebnis führen, aber nicht zweideutig sind.

0 Kudos

Im SQL fehlt noch die Berücksichtigung des temporalen Aspektes. Ausserdem muss die Abfrage von FirstSpirit auf  "artikelPool" und nicht auf der Zwischentabelle gemacht werden. Aber ja, das wäre die Richtung, die man gehen müsste.

Peter
0 Kudos