Doppelte Resultate bei Ergebnis von Ansichten
am 19.02.2009 - 22:51 Uhr in
Hallo Leute,
irgendwie stehe ich gerade "auf dem Schlauch"!
Ich habe zu Testzwecken einen Inhaltstypen geschaffen, der zwei Felder enthält: Pflanzen und Farbe.
Zusammen bilden sie den Titel des Beitrags (z.B. rote Rosen, gelbe Rosen, blaue Veilchen, etc.).
Nun möchte ich mir mit Hilfe des Viewsmoduls alle Pflanzen in einer Liste anzeigen lassen: Rosen, Veilchen etc.
Dummerweise zeigt er mir aber die Rosen doppelt an: Rosen, Rosen, Veilchen.
Warum ist mir klar: es gibt ja schließlich zwei nodes (rote Rosen, gelbe Rosen).
Aber kann man diese doppelten Einträge in der Liste (Farben sollen nicht angezeigt werden) irgendwie vermeiden?
Sollte doch einfach realisierbar sein, aber ich bekomme diese simple Abfrage einfach nicht gebacken )-:
- Anmelden oder Registrieren um Kommentare zu schreiben
Da gibt's doch "Eindeutig"
am 20.02.2009 - 11:28 Uhr
Im "Block" Basiseinstellungen von Views gibt's die Option Eindeutig, stell die mal auf Ja das sollte eigentlich reichen.
Gruss Roger
Gruss Roger
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen (1. Posting vom Thema) <==> das erleichtert das finden von Lösungen
doppelte Einträge in Viewsansicht
am 20.02.2009 - 12:50 Uhr
Danke für Deinen Tip!
Diesen Punkt hatte ich völlig übersehen!
Allerdings hat dies nicht zum Erfolg geführt - immernoch doppelte Ergebnisse )-:
Hier mal die Einstellungen (Ansicht als Seite):
Filter --> Node: Typ = Pflanzentypen
Felder --> Inhalt: Pflanzen - (field_pflanzen) Titel (Link)
Basiseinstellungen
Design --> Tabelle
Eindeutig --> Ja
Pfad und Titel wurden von mir noch vergeben (aber das sollte wohl keine Rolle spielen ...)
Hallo, Dein Titel/Link ist
am 20.02.2009 - 13:59 Uhr
Hallo,
Dein Titel/Link ist eben _eindeutig_! Wenn Du den in Deiner Select Clause hast (sieh mal beim SQL der View nach), dann bleibt es auch bei der Einstellung "eindeutig" bei zwei Einträgen.
Würdest Du das Feld "Titel" aus der View entfernen, ginge es wohl. Du hast dann aber das Problem, dass Du _keinen_ Link hinkriegst, weil die View dann ja nicht weiss, welche Ausprägung z.B. der Rose Du haben willst...
IOW: Deine Datenstruktur müsste anders werden, je nachdem, was Deine Inhalte sind.
Eine Möglichkeit wäre, einen generischen Inhaltstyp "Pflanzen" zu machen, und dann die Sorten und Eigenschaften über Taxonomy zuzuweisen. Damit könntest du z.B. auch alle roten Blumen finden.
Eine andere Idee ist, dies echt relational aufzuziehen (mit Nodereference), aber das könnte in Deinem Fall vielleicht auch zuviel des guten sein.
lg leda
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Änderung des Beispiels
am 23.02.2009 - 16:49 Uhr
Da ich mich vermutlich unverständlich ausgedrückt habe, werde ich hier ein neues Beispiel beschreiben, um das Problem vielleicht damit besser zu skizzieren:
zwei Inhaltstypen: PERSON und TÄTIGKEIT
PERSON (Name, Vorname, Adressdaten etc.)
TÄTIGKEIT (Gruppe, Aufgabe, nodereference auf PERSON)
Warum nicht 1 Inhaltstyp?
Eine Person kann in mehreren Gruppen und mit unterschiedlichen Aufgaben tätig sein (in Gruppe A - Aufgabe A, in Gruppe A - Aufgabe C, in Gruppe B - Aufgabe A).
Daher hatte ich die Idee, um eine halbwegs relationale DB zu erzeugen, einen extra Inhaltstyp zu kreieren (TÄTIGKEIT).
Das Abfrageproblem (Ansichten - Views):
Nun möchte ich mir mit Hilfe des Viewsmoduls alle die PERSONEN in einer Liste anzeigen lassen, die speziell in Gruppe A tätig sind (es entfallen folglich Personen die keiner Gruppe angehören und damit keiner Tätigkeit nachgehen oder dies tun, aber eben nicht in Gruppe A). Ein view auf die Gruppe A mit Anzeige der Personen (nodereference).
Dummerweise zeigt er mir aber die Personen doppelt an, die mehrere Aufgaben innerhalb der Gruppe A ausführen.
Aber kann man diese doppelten Einträge (Name der Person) in der Liste (Aufgabe und Gruppe sollen nicht angezeigt werden) irgendwie vermeiden?
Die aufgelisteten Namen sollten natürlich auf die entsprechende Node verlinken (Adresse der Person).
Sollte doch einfach realisierbar sein, aber ich bekomme diese simple Abfrage einfach nicht gebacken )-:
Bis dahin sollte Deine
am 23.02.2009 - 17:28 Uhr
Bis dahin sollte Deine Konstruktion funktionieren.
(obwohl Dein Beispiel eine n:n:n Relation ist, aber solange Du den Gruppen nicht grösseres Gewicht beimisst, gehts...).
Aber eine Frage:
Hast Du in Deiner View im Abschnitt "Felder" solche, die NICHT zum Inhaltstyp PERSON gehören?
Wenn ja, dann bitte NUR Felder aus dem Inhaltstyp PERSON verwenden und den Schalter "eindeutig" auf ja.
Wenns denn immer noch nicht geht, dann bringe hier mal den SQL (wird in der Views-Vorschau angezeigt).
lg
leda
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
SQL & Co. zur Ansicht
am 24.02.2009 - 15:40 Uhr
Also hier mal der Code:
SELECT DISTINCT(node.nid) AS nid,
node_data_field_funktion.field_person_nid AS node_data_field_funktion_field_person_nid,
node_data_field_funktion.nid AS node_data_field_funktion_nid,
node.type AS node_type
FROM node node
LEFT JOIN content_type_taetigkeit node_data_field_funktion ON node.vid = node_data_field_funktion.vid
WHERE node_data_field_funktion.field_funktion_value IS NOT NULL
und hier die Einstellungen der Ansicht:
Filter
Inhalt: Funktion - (field_funktion) nicht leer
Felder
Inhalt: Person - (field_person) Titel (Link)
Basiseinstellungen
Eindeutig: Ja
Die Idee:
Liste mir das Feld field_person (es handelt sich um eine nodereference auf die Tabelle PERSON und enthält einen Vor- und Zunamen) einmal auf, sofern das Feld field_funktion nicht leer ist (sprich die Person eine Funktion bzw. Aufgabe betraut).
Das Problem:
Da eine Person mehrere Funktionen (bzw. Aufgaben) haben kann, tauchen diese dann mehrmals auf.
Ich hätte aber gerne, dass jede Person, die eine Funktion inne hat, nur einmal aufgelistet wird....
Eben, hier liegt der Hase im
am 24.02.2009 - 15:58 Uhr
Eben, hier liegt der Hase im Pfeffer:
SELECT DISTINCT(node.nid) AS nid,
node_data_field_funktion.field_person_nid AS node_data_field_funktion_field_person_nid,
node_data_field_funktion.nid AS node_data_field_funktion_nid,
node.type AS node_type
Das "eindeutig" bezieht sich auf *alle* Felder im Select-Abschnitt, aber nur schon node_data_field_funktion.nid AS node_data_field_funktion_nid kommt pro Person eben mehrfach vor.
Ich werde das mal bei mir ausprobieren, wie genau die View hierfür erfasst werden sollte. Das Problem ist, dass Deine Lead-Tabelle die Funktion statt die Person ist.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
OK, Du hast recht - es geht
am 24.02.2009 - 19:56 Uhr
OK, Du hast recht - es geht wirklich nicht :-(
Die View kann nicht so umgebogen werden, dass der SQL letztlich so aussieht:
SELECT DISTINCT
node_data_field_name.field_name_value AS node_data_field_name_field_name_value,
node_data_field_name.nid AS node_data_field_name_nid
FROM fsm_node node
LEFT JOIN fsm_content_type_ct_funktion node_data_field_person ON node.vid = node_data_field_person.vid
INNER JOIN fsm_node node_node_data_field_person ON node_data_field_person.field_person_nid = node_node_data_field_person.nid
LEFT JOIN fsm_content_type_ct_personen node_data_field_name ON node_node_data_field_person.vid = node_data_field_name.vid
WHERE node.type in ('ct_funktion')
Lässt man ihn im phpMyAdmin laufen, dann bringt er exakt die Liste, die wir gerne hätten. Der SQL in der View sieht aber weitere Felder in der Select-Clause vor:
SELECT DISTINCT(node.nid) AS nid,
node_data_field_name.field_name_value AS node_data_field_name_field_name_value,
node_data_field_name.nid AS node_data_field_name_nid,
node_node_data_field_person.type AS node_node_data_field_person_type
FROM fsm_node node ...
In der View lässt sich die relationale Richtung nicht umkehren: Aktuell ist immer eine "Child-Tabelle" Lead...ich hoffe, in einer Views 3 wird man das SQL-Statement händisch anpassen können...
In diesem Fall würde ich wahrscheinlich folgenden Ansatz wählen:
1. Inhaltstyp Person
2. Taxonomy-Vokabular für Gruppen, für Person zulassen
3. Taxonomy-Vokabular für Funktionen, für Person zulassen
Damit kann man den einzelnen Personen 1-n Gruppen und 1-n Funktionen zuordnen (so werden notabene auch Personen möglich, die in einer Gruppe sind, aber *keine* Funktion haben).
Ausserdem hast Du in der View dann nur 1 Inhaltstyp zu managen, und nach den Gruppen und Funktionen kann separat gefiltert werden.
Vielleicht hilft Dir das weiter...
lg leda
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
1 Inhaltstyp
am 24.02.2009 - 20:45 Uhr
Den Ansatz alles in einem Inhaltstyp zu vereinigen hatte ich zunächst auch, ihn aber dann verworfen ...
Auf jeden Fall vielen Dank, daß Du Dich damit beschäftigt hast!
Ist es eigentlich möglich, eine Ansicht/View "auszutricksen" und die SQL-Abfrage direkt in die Datenbank zu schreiben (unter dem Namen der Ansicht sozusagen)?
Dies würde mir auch bei einem anderen Problem helfen:
innerhalb einer Ansicht wird eine Änderung der voreingestellten Jahresspanne ("-3:+3") nicht akzeptiert!
Ich hab' da noch was gefunden
am 24.02.2009 - 21:04 Uhr
Bei meinem Spatziergang durch die Module habe ich noch etwas entdeckt, was evtl. noch weiterhelfen könnte: http://drupal.org/project/term_fields
Ich habe mir das Module jetzt noch nicht angesehen, aber von der Beschreibung her könnte das zur Problemlösung beitragen.
Gruss Roger
Gruss Roger
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen (1. Posting vom Thema) <==> das erleichtert das finden von Lösungen
Hallo, das Rabbit69
am 18.03.2010 - 20:02 Uhr
Hallo,
das
Im "Block" Basiseinstellungen von Views gibt's die Option Eindeutig, stell die mal auf Ja das sollte eigentlich reichen.
hat mir eben super in einem anderen Fall geholfen :-) Vielen Dank!
Gruß
Sebastian
--- Web | Twitter | XING ---