Ergebnis 1 bis 14 von 14

Thema: FE Filter für Eltern-/Kindtabelle

  1. #1
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    56

    Standard FE Filter für Eltern-/Kindtabelle

    Hallo,

    ich habe ein Problem beim Erstellen eines Frontend-Filters über zwei Tabellen.

    Ausgangssituation:

    Zwei MM:
    _ Mitarbeiter (Attribute: Mitarbeiter, Abteilung, Betrieb, Funktion...)
    |_ Kalenderdaten (Attribute: Jahr, Monat, Tage...)

    Die Tabelle Kalenderdaten ist die Kindtabelle von Mitarbeitern.

    Mein Problem:

    Ich möchte nun eine Frontendausgabe mit den Kalenderdaten erstellen mit einem passendem Filter über beide Tabellen. Über den Filter sollen die Attribute Mitarbeiter, Funktion und Abteilung aus der Tabelle Mitarbeiter und die Attribute Jahr/Monat aus der Kindtabelle Kalenderdaten auswählbar sein. D.h., wenn ich z.B. einen Mitarbeiter und einen Monat aus dem Filter auswähle sollen alle zugehörigen Kalenderdaten ausgegeben zu diesem Filter ausgegeben werden.

    Gruß Dirk

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

    Standard

    Du hast wahrscheinlich als RenderModus "Elternelement vorhanden" ausgewählt und jedem MA einige Kalenderdaten hinzugefügt...

    ... dann sollte in Deiner Tabelle mm_kalender die pid geich der MA-id sein

    also kannst Du über mm_kalender gehen mit der Einschränkung mm_kalender.pid = mm_mitarbeiter.id und anschließend nach Monat filtern bzw. gruppieren

  3. #3
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    56

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Du hast wahrscheinlich als RenderModus "Elternelement vorhanden" ausgewählt und jedem MA einige Kalenderdaten hinzugefügt...

    ... dann sollte in Deiner Tabelle mm_kalender die pid geich der MA-id sein

    also kannst Du über mm_kalender gehen mit der Einschränkung mm_kalender.pid = mm_mitarbeiter.id und anschließend nach Monat filtern bzw. gruppieren
    Hallo zonky,

    ja, genau so habe ich das gemacht, aber mit dem Filter verstehe ich immer noch nicht . Wie lege ich denn dann den Filter an, damit ich auch den Mitarbeiter auswählen kann? jahr/Monat ist ja kein Problem, da die Attribute ja im mm_kalender stehen. Aber der Mitarbeiter steht im mm_mitarbeiter und auf den habe ich ja keinen Zugriff wenn ich den Filter im MM Kalender anlege, oder?

    Hier ist ein Screenshot, wie ich mir das vorstelle... filter.jpg

    Gruß Dirk

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

    Standard

    ungetestet...

    in einem Filter für jedes "Pull-Down" eine Filterregel anlegen und zum Schluss alles einem eigenen SQL übergeben

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

    Standard

    habe das gestern nochmal mit einem kleinen Testbeispiel nachgebaut...

    * zwei Filter angelegt
    * 1. Filter mit Filterregel "Auswahl" auf mm_mitarbeiter Attribut <Name> und als URL-Parameter "ma_name"
    * 2. Filter mit Filterregel "Eig. SQL" auf mm_kalender und hier per {{param::filter?name=ma_name}} den Wert aus dem ersten Filter übernommen

    ... das SQL müsste nun einige "Scheifen" drehen, um aus dem Namen die MA-Id zu ermitteln und das als pid in mm_kalender abzufragen - anschließend kann das gefiltert werden...

    so wie es aussieht, könnte es demnächst die Möglichkeit geben, bei Filter 1 direkt die id (oder alias o.ä.) zu übergeben...

    Gruss

  6. #6
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    56

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    habe das gestern nochmal mit einem kleinen Testbeispiel nachgebaut...

    * zwei Filter angelegt
    * 1. Filter mit Filterregel "Auswahl" auf mm_mitarbeiter Attribut <Name> und als URL-Parameter "ma_name"
    * 2. Filter mit Filterregel "Eig. SQL" auf mm_kalender und hier per {{param::filter?name=ma_name}} den Wert aus dem ersten Filter übernommen

    ... das SQL müsste nun einige "Scheifen" drehen, um aus dem Namen die MA-Id zu ermitteln und das als pid in mm_kalender abzufragen - anschließend kann das gefiltert werden...

    so wie es aussieht, könnte es demnächst die Möglichkeit geben, bei Filter 1 direkt die id (oder alias o.ä.) zu übergeben...

    Gruss
    Hallo zonky,

    erst einmal vielen Dank für die Beschreibung.

    Ich habe nun folgendes gemacht:

    - einen Filter für die Tabelle mm_mitarbeiter (Einzalauswahl, Attribut=Mitarbeiter, URL=ma_name) angelegt
    - einen Filter für die Tabelle mm_kalender mit 3 Einträgen
    - Eig. SQL = select id from {{table}} where pid in (select id from mm_mitarbeiter where mitarbeiter = {{param::filter?name=ma_name}})
    - Einzelauswahl, Attribut=jahr
    - Einzelauswahl, Attribut=Monat

    Dann habe ich einen Artikel mit den beiden Filtern und einer Liste mit mm_kalender erstellt. Alles wird korrekt angezeigt.

    Die Liste kann ich mit dem Filter in mm_kalender (Jahr/Monat) filtern. Wähle ich jedoch einen Mitarbeiter aus dem Filter mm_mitarbeiter aus, dann wird die Liste nicht danach gefiltert.
    Wenn ich den $_GET auslese, dann wird der korrekte Mitarbeiter übergeben (leider nicht die ID, sondern der Name) ((Array ( [ma_name] => Name, Vorname [monat] => 12 )))

    Wenn ich mir im Debug-Modus mal die Queries anschaue, dann sieht das auch korrekt aus:
    Code:
                [70] => Array
                    (
                        [query] => select * from mm_kalender where 
    pid in (select id from mm_mitarbeiter where mitarbeiter= 'Name, Vorname')
                        [explain] => Array
                            (
                                [id] => 1
                                [select_type] => SIMPLE
                                [table] => mm_mitarbeiter
                                [type] => ALL
                                [possible_keys] => 
                                [key] => 
                                [key_len] => 
                                [ref] => 
                                [rows] => 1306
                                [Extra] => 
                            )
    
                        [returned] => 22 row(s) returned
                        [duration] => 4,603 ms
                    )
    Ich weis leider nicht, wo mein Fehler liegt :-(

    Gruß Dirk

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

    Standard

    dann gib doch den Query mal bei phpMyAdmin ein

    PHP-Code:
    select from mm_kalender where 
    pid in 
    (select id from mm_mitarbeiter where mitarbeiter'Name, Vorname'
    Du hast wirklich einen MA der "Name, Vorname" heißt..??

  8. #8
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    56

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    dann gib doch den Query mal bei phpMyAdmin ein

    PHP-Code:
    select from mm_kalender where 
    pid in 
    (select id from mm_mitarbeiter where mitarbeiter'Name, Vorname'
    Du hast wirklich einen MA der "Name, Vorname" heißt..??
    Habe ich auch schon getestet. Gibt genau 22 Records zurück. Passt also.

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

    Standard

    Du hast einen MA der "Vorname Name" heißt?? nicht etwa "Thomas Müller"??

    wenn Du hier 22. Kalendereinträge bekommst, sollten Die ja auch ausgegeben werden

  10. #10
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    56

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Du hast einen MA der "Vorname Name" heißt?? nicht etwa "Thomas Müller"??

    wenn Du hier 22. Kalendereinträge bekommst, sollten Die ja auch ausgegeben werden
    Der Mitarbeiter ist nur exemplarisch. Er könnte auch James Bond heißen :-)
    Ich habe aber festgestellt, dass ich in der MM-Liste den falschen Filter zugeordnet habe...sorry.

    Jetzt habe ich jedoch den umgekehrten Fall. D.h. es wird nichts mehr ausgegeben :-( Wenn ich aus dem Filter mm_kalender den Eintrag für den Mitarbeiter deaktiviere, dann bekomme ich auch Datensätze angezeigt. Muss also an: select id from {{table}} where pid in (select id from mm_mitarbeiter where mitarbeiter = {{param::filter?name=ma_name}}) liegen.

    Code:
    [query] => select id from mm_kalender where 
    pid in (select id from mm_mitarbeiter where mitarbeiter = 'Schuster-Dirk')
                        [explain] => Array
                            (
                                [id] => 1
                                [select_type] => SIMPLE
                                [table] => mm_kalender
                                [type] => ALL
                                [possible_keys] => 
                                [key] => 
                                [key_len] => 
                                [ref] => 
                                [rows] => 1306
                                [Extra] => 
                            )
    
                        [returned] => 24 row(s) returned
                        [duration] => 5,887 ms
                    )
    Geändert von dws0709 (26.11.2015 um 21:44 Uhr)

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

    Standard

    dann ggf. Schritt für Schritt vorgehen - also mit der Auswahl und dem eing. SQL sollten nur noch die Einträge des MA zu sehen sein - anschließend kann man die nochmal weiter eingrenzen

    ich glaube, mehr kann ich dann auch nicht mehr beisteuern...

  12. #12
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    56

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    dann ggf. Schritt für Schritt vorgehen - also mit der Auswahl und dem eing. SQL sollten nur noch die Einträge des MA zu sehen sein - anschließend kann man die nochmal weiter eingrenzen

    ich glaube, mehr kann ich dann auch nicht mehr beisteuern...
    Guter Ansatz...so habe ich es gemacht. Wenn ich nun filter in {{param::filter?name=ma_name}} durch get ersetze bekomme ich nur die Datensätze des ausgewählten Mitarbeiters :-) Wähle ich aber keinen Mitarbeiter aus, dann bekomme ich keine Datensätze, da ja NULL übergeben wird. In diesem Fall würde ich nun alle Mitarbeiter ausgeben wollen.

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

    Standard

    Zitat Zitat von dws0709 Beitrag anzeigen
    Wähle ich aber keinen Mitarbeiter aus, dann bekomme ich keine Datensätze, da ja NULL übergeben wird. In diesem Fall würde ich nun alle Mitarbeiter ausgeben wollen.
    sollte auch machbar sein - muss man etwas knobeln... Tipp "doppelte Verneinung" und "{{param::...&default=xxx}}"

  14. #14
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    56

    HTML

    Zitat Zitat von zonky Beitrag anzeigen
    sollte auch machbar sein - muss man etwas knobeln... Tipp "doppelte Verneinung" und "{{param::...$default=xxx}}"
    Hallo zonky,

    mit ...$default... habe ich es nicht hin bekommen. Aber ein anderer Thread hat mich zu folgender Lösung animiert:

    Im Filter "Eig. SQL"
    Code:
    SELECT id FROM mm_kalender {{file::abfrage_filter_ma_name.html5}}
    und in abfrage_filter_ma_name.html
    Code:
    <?php 
    if(\Input::get('ma_name'))
    { 
    	$key = \Input::get('ma_name');
    	echo "WHERE pid IN (SELECT id FROM mm_mitarbeiter WHERE mitarbeiter= '".$key."')";
    }; 
    ?>
    Ist vielleicht nicht die optimale Lösung, aber funktioniert wie gewünscht.

    Vielen Dank für die guten Tipps :-)

    Gruß Dirk

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
  •