[LEFT JOIN] Weiteres Left Join Anhängen mit Sortierfunktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [LEFT JOIN] Weiteres Left Join Anhängen mit Sortierfunktion

    Hallo,


    ich habe folgende Abfrage:

    SELECT
    `t1_cod4key`.`key_key`,
    `t1_cod4key`.`key_count`,
    `t1_cod4changenick`.`changenick_nick`
    FROM
    `t1_cod4key`
    Left Join `t1_cod4ban` ON `t1_cod4key`.`key_key` = `t1_cod4ban`.`ban_key`
    Left Join `t1_cod4changenick` ON `t1_cod4key`.`key_key` = `t1_cod4changenick`.`changenick_key`
    WHERE
    `t1_cod4ban`.`ban_key` IS NULL
    ORDER BY
    `t1_cod4key`.`key_count` DESC
    LIMIT 20
    Jetzt habe ich ein weiter Tabelle die angefügt werden sol. Diese Tabelle sie folgendermassen aus:

    NICK_ID | NICK_KEY | NICK_NICK | NICK_COUNT


    Zu jedem KEY kann es mehrer NICK geben. Ich möchte jetzt gerne den übereinstimmenden KEY anhängen, wobei dann die Spalte genommen werden soll in der COUNT am größten ist.

    z.B.

    NICK_KEY NICK_NICK NICK_COUNT
    ab123 Bernd 2
    ab123 Hubert 9
    ab123 Dethlef 10
    hg623 Dieter 11
    hg623 Karl 1


    jetzt soll er mir obern, wo der Key ab123 angezeigt wird Dethlef anhängen und wo der Key hg 623 angzeigt wird Dieter anhängen.

    Leider bekomme ich das nicht in einer Abfrage hin :-(

  • #2
    SELECT
    `t1_cod4key`.`key_key`AS key,
    `t1_cod4key`.`key_count`AS count,
    `t1_cod4changenick`.`changenick_nick`AS changes
    ...
    GROUP BY key HAVING MAX(changes)
    ORDER BY changes DESC
    LIMIT 20

    Kommentar


    • #3
      Bin ich nicht ganz schlau draus geworden.

      HAbe aber es mal versucht einzubauen, bekomme aber ein falsches ergebniss und werde auch nicht draus schlau, da das völlig zusammengwürfelt aussieht...



      SELECT
      `t1_cod4key`.`key_key`,
      `t1_cod4key`.`key_count`,
      `t1_cod4changenick`.`changenick_nick`,
      `t1_cod4keynick`.`nick_nick`,
      `t1_cod4keynick`.`nick_count`
      FROM
      `t1_cod4key`
      Left Join `t1_cod4ban` ON `t1_cod4key`.`key_key` = `t1_cod4keynick`.`nick_key`
      Left Join `t1_cod4changenick` ON `t1_cod4key`.`key_key` = `t1_cod4changenick`.`changenick_key`
      Inner Join `t1_cod4keynick` ON `t1_cod4key`.`key_key` = `t1_cod4keynick`.`nick_key`
      WHERE
      `t1_cod4ban`.`ban_key` IS NULL
      GROUP BY
      `t1_cod4keynick`.`nick_count`
      HAVING
      MAX(`t1_cod4keynick`.`nick_count`)
      ORDER BY
      `t1_cod4key`.`key_count` DESC
      LIMIT 20
      Es werden jetzt von einem Key mehrer Einträge angzeigt, obwohl er nur den key anzeigen soll, mit dem dazugehörigen nick, der nick ist derjenige, der den größten wert in der tabelle keynick bei dem Feld count hat und den gleichen key
      Zuletzt geändert von Laire; 11.01.2008, 08:34.

      Kommentar


      • #4
        Zuerst mal
        • Lass die ganzen Backticks weg, die machen alles unlesbar. Wenn du die benötigst, stimmt dein DB-Design nicht.
        • Auch SQL-Code kann eingerückt werden, um lesbarer zu sein
        • Ich würde Aliases benutzen statt diese ellenlangen Tabellennnamen immer wieder zu wiederholen
        • Vorbildlich ist deine Gross-Kleinschreibung!
        Und nun zum Problem: Mit GROUP BY wirst du in diesem Fall nicht weiter kommen, weil du dann für alle nicht direkt von den in der GROUP BY-Klausel enthaltenen Attributen 1:1 abhämgigen Daten zufällige Ergebnisse erhälst (Was für ein Satz!). Ich kenne ausser MySQL auch kein DBMS, dass solche Befehle erlaubt. Ich denke, du benötigst hier einen Subselect, etwa so ähnlich diesem:
        Code:
        SELECT
        	t1.key_key,
        	t1.key_count,
        	t2.changenick_nick,
        	t4.nick_nick
        	
        FROM
        	t1_cod4key	t1
        LEFT JOIN 
        	t1_cod4ban t2 ON t1.key_key = t2.ban_key
        LEFT JOIN 
        	t1_cod4changenick t3 ON t1.key_key = t3.changenick_key
        LEFT JOIN 
        	neue_tabelle t4 ON t1.key_key = t4.nick_key
        WHERE
        	t2.ban_key IS NULL
          AND
          	t4.nick_count = (
          		SELECT
          			MAX(nick_count)
          		FROM
          			neue_tabelle
          		WHERE
          			nick_key = t1.key_key
          	)
        ORDER BY
        	t1.key_count DESC
        Und falls etwas damit nicht gleich funktioniert, versuch mal zuerst den Fehler selber zu finden, bevor du dich wieder meldest.
        Gruss
        H2O

        Kommentar

        Lädt...
        X