Ergebnis 1 bis 12 von 12

Thema: SQL Filter - Sortierung über 2 MMs

  1. #1
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    563

    Standard SQL Filter - Sortierung über 2 MMs

    Hallo,

    ich möchte über zwei Tabellen die Datensätze sortieren, aber irgendwie klappt das nicht. Führe ich diese Abfrage im sql aus, dann werden die Daten sortiert wie ich es möchte:

    HTML-Code:
    SELECT * FROM mm_futtermischungen, mm_futtermischungen_auswahl
    WHERE lieferant=mm_futtermischungen_auswahl.id
    ORDER BY mm_futtermischungen_auswahl.name ASC, titel ASC
    Aktiviere ich den Filter in Contao ist die Liste leer.

    Ich habe das als eigenen SQL Filter in mm-futtermischungen angelegt.

    Darf ich in dem Fall nicht alle Felder selektieren oder was mache ich falsch?

    Ich habe dazu auch leider nicht viel passendes gefunden. Wenn ich nach Frontend Sortierung schaue, finde ich zwar alle möglichen Beiträge und Tutorials, aber jeder will etwas anderes sortieren. Aber wer weiß, ob ich die richtigen Begriffe versucht habe.

    Das Sortieren ausschließlich nach Lieferant klappt natürlich schon, wenn ich das im Inhaltselement so angebe.
    Geändert von Shania (13.01.2018 um 13:26 Uhr)
    Viele Grüße
    Shania

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

    Standard

    * ob Du "SELECT *" oder "SELECT id" schreibst, ist egal - es wird immer nur die ID verwendet und ausgewertet/zur nächsten Filterregel gereicht

    * bitte keine mehrere Tabellen bei "FROM" - arbeite mit Sub-Selects

  3. #3
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    * ob Du "SELECT *" oder "SELECT id" schreibst, ist egal - es wird immer nur die ID verwendet und ausgewertet

    * bitte keine mehreren Tabellen bei "FROM" - arbeite mit Sub-Selects
    Wobei bei select * viele nicht benötigte Daten verarbeitet werden....

  4. #4
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    563

    Standard

    Das war jetzt nicht so einfach für mich, denn Subselects habe ich noch nie verwendet, aber so klappt es nun:

    HTML-Code:
    select *
    	from mm_futtermischungen f
    	order by (select a.name
                          from mm_futtermischungen_auswahl a
                          where f.lieferant = a.id
                         ) ASC, f.titel ASC
    Danke für den Tipp!

    Vielleicht magst du das ja ins Cookbook mit aufnehmen, zonky. Leider weiß ich jetzt nicht, wo die zwei Tabellen stehen, aber so ähnlich würde es dann sein.

    Items im Frontend nach der Bezeichnung eines Auswahlfeldes (zweites Metamodel) und eines Feldes der Haupttabelle sortieren.

    HTML-Code:
    SELECT id 
           FROM mm_mitarbeiter ma
           ORDER BY (select ab.abteilungsnummer       
                            FROM mm_abteilung ab
                            WHERE ma.id?=ab.id?
                            ) ASC, ma.name ASC
    Die Abfrage wird als "Eigene SQL Abfrage" bei dem der Liste hinterlegten Filter an erster Stelle angelegt. Eine Filtereinstellung im Inhaltselement im Frontend (oder Modul?) überschreibt die Sortierung.

    Du kannst es selber anpassen oder mir sagen, wo ich die Tabellen ansehen kann. Dann kann ich es auch selber machen.
    Geändert von Shania (13.01.2018 um 19:15 Uhr)
    Viele Grüße
    Shania

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

    Standard

    Zitat Zitat von Shania Beitrag anzeigen
    oder mir sagen, wo ich die Tabellen ansehen kann. Dann kann ich es auch selber machen.
    z.B. http://www.e-spin.de/contao-metamodels.html => "Mein erstes MetaModel" V2

  6. #6
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    563

    Standard

    Der Teil fehlt doch noch in der Doku, wenn ich das richtig sehe und extra das Paket will ich mir jetzt nicht installieren. Da müsste ich mir erst ne extra Umgebung für hinstellen. Deshalb fragte ich wo ich die Tabellen sehen kann, aber das gibt es dann wohl bisher nicht.
    Viele Grüße
    Shania

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

    Standard

    Zitat Zitat von Shania Beitrag anzeigen
    Der Teil fehlt doch noch in der Doku, wenn ich das richtig sehe und extra das Paket will ich mir jetzt nicht installieren. Da müsste ich mir erst ne extra Umgebung für hinstellen. Deshalb fragte ich wo ich die Tabellen sehen kann, aber das gibt es dann wohl bisher nicht.
    * Welcher Teil fehlt in der Doku?

    * In dem Zip ist eine SQL-Datei mit allen Tabellen - entweder so rein gucken oder irgendwo per phpMyAdmin o.ä. einladen

  8. #8
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    563

    Standard

    Ich habe mir das nun angesehen (ich hatte das Beispiel noch nie installiert) und bin etwas verdutzt. Das ist jetzt spannend. In den zwei Beispiel-MMs braucht man diese Art des Selects gar nicht?!

    Hier ist in der Tabelle mm_mitarbeiterliste das Feld "abteilung" in der Datenbank gefüllt mit dem Klarnamen der Abteilung (siehe unten die fette Markierung). So kann man auch direkt im Haupt-MM danach sortieren und braucht keinen Subselect in die Tabelle mm_abteilung, wenn man z.B. zuerst nach den Abteilungen und dann innerhalb der Abteilung nach den Nachnamen der Mitarbeiter sortieren möchte.

    Liegt das daran wie ich die MMs anlege? Wobei ja eigentlich auch der Sinn der Normalisierung der ist, mit IDs zu verknüpfen und eben nicht die Klarnamen in jeder Tabelle zu haben oder nicht?

    Damit sich das nun nicht jeder runterladen muss, stelle ich die zwei SQL Statements für die Tabellen mal hier mit ein paar Beispieldaten hin.

    HTML-Code:
    CREATE TABLE `mm_abteilung` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `pid` int(10) unsigned NOT NULL,
      `sorting` int(10) unsigned NOT NULL DEFAULT '0',
      `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
      `name` varchar(255) NOT NULL DEFAULT '',
      `alias` varchar(255) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    INSERT INTO `mm_abteilung` (id,pid,sorting,tstamp,name,alias) VALUES ('1','0','0','1442498948','GF','gf');
    INSERT INTO `mm_abteilung` (id,pid,sorting,tstamp,name,alias) VALUES ('2','0','0','1442498979','Einkauf','einkauf');
    INSERT INTO `mm_abteilung` (id,pid,sorting,tstamp,name,alias) VALUES ('3','0','0','1442499000','Verkauf','verkauf');
    INSERT INTO `mm_abteilung` (id,pid,sorting,tstamp,name,alias) VALUES ('4','0','0','1442499032','Marketing','marketing');
    INSERT INTO `mm_abteilung` (id,pid,sorting,tstamp,name,alias) VALUES ('5','0','0','1442499062','Personal','personal');
    INSERT INTO `mm_abteilung` (id,pid,sorting,tstamp,name,alias) VALUES ('6','0','0','1442515198','Kundendienst','kundendienst');
    DROP TABLE IF EXISTS `mm_mitarbeiterliste`;
    CREATE TABLE `mm_mitarbeiterliste` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `pid` int(10) unsigned NOT NULL,
      `sorting` int(10) unsigned NOT NULL DEFAULT '0',
      `tstamp` int(10) unsigned NOT NULL DEFAULT '0',
      `name` varchar(255) NOT NULL DEFAULT '',
      `vorname` varchar(255) NOT NULL DEFAULT '',
      `email` varchar(255) NOT NULL DEFAULT '',
      `abteilung` varchar(255) NOT NULL DEFAULT '',
      `published` char(1) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=103 DEFAULT CHARSET=utf8;
    INSERT INTO `mm_mitarbeiterliste` (id,pid,sorting,tstamp,name,vorname,email,abteilung,published) VALUES ('1','0','0','1442415486','Mayer','Herbert','h.mayer@mmtest.com','Verkauf','1');
    INSERT INTO `mm_mitarbeiterliste` (id,pid,sorting,tstamp,name,vorname,email,abteilung,published) VALUES ('3','0','0','1442415486','Ochoa','Cara','Cara.Ochoa@mmtest.com','Marketing','1');
    INSERT INTO `mm_mitarbeiterliste` (id,pid,sorting,tstamp,name,vorname,email,abteilung,published) VALUES ('4','0','0','1442415486','Lane','Lucian','Lucian.Lane@mmtest.com','Verkauf','1');
    INSERT INTO `mm_mitarbeiterliste` (id,pid,sorting,tstamp,name,vorname,email,abteilung,published) VALUES ('5','0','0','1442415486','Moon','Melissa','Melissa.Moon@mmtest.com','Personal','1');
    Die Stelle, wo bei mir nur die id steht, habe ich hier exemplarisch fett markiert.
    INSERT INTO `mm_mitarbeiterliste` (id,pid,sorting,tstamp,name,vorname,email,abteilun g,published) VALUES ('1','0','0','1442415486','Mayer','Herbert','h.may er[at]mmtest.com','Verkauf','1');
    Viele Grüße
    Shania

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

    Standard

    ... kann sein, dass ich damals (bei dem einfachen Beispiel) statt der id den Namen als Wert verwendet habe... die Speicherung der id ist natürlich vorzuziehen!

  10. #10
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    563

    Standard

    So kann man das Beispiel nur nicht für das verwenden, was ich zeigen möchte und es spiegelt ja eigentlich auch nicht den aktuellen Stand von MM wieder.

    Tjor, und nu? Für die Doku wäre es wohl am besten, wenn du das Beispiel anpasst oder was denkst du? "Mein zweites Metamodel" wird in der Doku ja sicherlich noch irgendwann folgen. Wenn du das dort später berücksichtigst, dann sollte es ja passen. Ist nur blöd, wenn jemand von dem installierten Beispiel ausgeht und dann gar nicht versteht wofür man so eine Abfrage braucht .
    Viele Grüße
    Shania

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

    Standard

    werde ich mal umstellen... ich gebe Info, wenn erledigt

  12. #12

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
  •