Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

GROUP BY LAST RECORD WITH MULTIPLE LEFT JOINS

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von schnell55, 8 September 2020.

  1. schnell55

    schnell55 Neuer Benutzer

    Hallo,

    ich würde gerne mehrere Tabellen Verknüpfen und von jeden Eintrag der verknüpften Tabelle die letzen Records haben.

    Bsp.

    Code:
    Tabelle Domain
    
    -- ID -- | -- DOMAIN -- | -- DATE --
        1         seite.de      08-09-2020
     
    Tabelle Domain Verify
    
    -- ID -- | -- DOMAIN_ID -- | -- IS SSL -- | -- DATE --
        1               1             0            06-09-2020
        2              1              1            07-09-2020
        3              1              1            08-09-2020
     
    Tabelle Domain SSL
    
    -- ID -- | -- DOMAIN_ID -- | -- SSL NAME -- | -- DATE --
        1                   1           NOT             06-09-2020
        2                  1            ENCRYPT          07-09-2020
        3                  1            ENCRYPT           08-09-2020
    
    Tabelle Revoked:
    
    -- ID -- | -- DOMAIN_ID -- | -- REVOKED -- | -- DATE --
        1                  1          1           06-09-2020
        2                  1          0           07-09-2020
        3                  1          0           08-09-2020
    

    Jetzt zeigt er mir bei der Domain SSL Tabelle an das der SSL Name NOT ist. Wollte aber den neusten Beitrag anzeigen lassen wo ENCRYPT STEHT vom 08.09

    Code:

    PHP:
    SELECT

    domain
    .id,

    domain_verify.domain_id,
    domain_verify.ssl_check

    domain_ssl
    .domain_id,
    domain_ssl.ssl_name,

    domain_ssl_revoked.domain_id,
    domain_ssl_revoked.revoked

    FROM domain

    LEFT JOIN domain_verify
    ON domain_verify
    .domain_id domain.id

    LEFT JOIN domain_ssl
    ON domain_ssl
    .domain_id domain_verify.id

    LEFT JOIN domain_ssl_revoked
    ON domain_ssl_revoked
    .domain_id domain_verify.id

    GROUP BY domain_verify
    .id ORDER BY domain_verify.date DESC 

    Kann mir jemand weiter helfen und verraten wo das problem liegt?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ja. Wenn Du gruppierst, müssen alle Spalten im Result entweder gruppiert oder aggregiert sein. Dies ist nicht der Fall. Daß MySQL dies nicht als syntaktischen Fehler erkennt, spricht nicht für, sondern gegen MySQL.

    Habe fertig, Andreas
     
  3. schnell55

    schnell55 Neuer Benutzer

    Wie gruppier ich dies denn? Ich dachte mit LEFT JOIN wäre es schon gruppiert...
     
  4. akretschmer

    akretschmer Datenbank-Guru

    nein, ein JOIN joint, gruppiert aber nicht. Die Syntax ist doch klar, oder?
     
  5. Walter

    Walter Administrator Mitarbeiter

    Das ist der entscheidende Hinweis:


    D.h. alle Spalten müssen entweder im GROUP BY enthalten sein oder mit z.B SUM behandelt werden.
     
  6. dabadepdu

    dabadepdu Datenbank-Guru

    kleine Anmerkung am Rande:
    Diese Regel ist nicht vollständig, aber ihre Anwendung löst wahrscheinlich 99% der Probleme. Sprich, es gibt weitere Regeln dazu, die man aber recht selten braucht. Wenn einem die Regel neu ist, braucht man die Erweiterung erst, wenn man die Regel verstanden hat.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden