inner join problem

  • Hallo Habe folgendes Problem ,

    bei der abfrage der Datenbsnk mit diesen code wird die Azeige immer verdoppelt

    es sind dann immer doppelte anzeigen auf der seite zu sehen .

    zb. wenn ich unter der tabelle.
    Musik_config im
    feld user id "1", 2 einträge habe und in der

    tabelle downloadmanager feld downloads "4" counter einträge drin sind werden die jeweiligen einträge zusammengezählt also 6 und es werden 6 angezeigt er soll aber nur die aus der Tabelle musik_config mit der user_id =1 und das counter ergebniss dazu anzeigen.

    ich finde den fehler leider nicht .

    wenn ich das

    PHP
    ON dm.filename = mc.mp3


    dazu packe zeigt er mir immer nur die downloads an wenn bereits gedownloadet wurde,
    also einträge in der tabelle download_manager sind.

    was ja nicht gut ist da ich ja nicht downloaden kann wenn nix angezeigt wird :(


  • Ein join ohne Verknüpfung macht keinen Sinn. Du musst das

    PHP
    ON dm.filename = mc.mp3

    ergänzen, aber nicht als inner join sondern als left outer join denke ich.

    PHP
    $sql3 = "
    SELECT
      dm.*, 
      mc.*
    FROM
      e107_mp3_download_manager AS dm
    LEFT OUTER JOIN e107_mp3_musik_config AS mc ON dm.filename = mc.mp3
    WHERE
     mc.musik_user_id = '{$id}'
      ";
  • Danke für deine Antwort aber leider zeigt er so gar nichts mehr an

    hast du noch ein tip versteh eben nicht warum er bei den ON befehl nun nichts mehr anzeigt

  • Ich sehe gerade - was ist denn da deine WHERE-Bedingung? Die macht so keinen Sinn. Theoretisch müsstest Du das was dort steht in JOIN mit aufnehmen, da Du dort auf die mc-Tabelle referenzierst. So kann natürlich nichts bei dem Statement raus kommen.

    Und: wenn Du etwas zusammenzählen willst, dann solltest Du GROUP und COUNT verwenden. Also:

    PHP
    $sql3 = "
    SELECT
      dm.*, 
      mc.*,
      COUNT(mc.mp3) AS anzahl
    FROM
      e107_mp3_download_manager AS dm
    LEFT OUTER JOIN e107_mp3_musik_config AS mc ON dm.filename = mc.mp3 AND mc.musik_user_id = '{$id}'
    GROUP BY dm.filename";

    Wenns das auch nicht ist, schreib bitte genau was Du abfragen willst. Denn deinen Beitrag oben verstehe ich nicht ganz, da Du Wunsch- und Problemzustand vermischst.

  • ich möchte eigentlich nur das beide tabellen abgerufen werden da in der tabelle downloadmanager die klickcounts gezählt werden und aus der tabelle musik_config die anderen daten kommen möchte ich beide tabellen abrufen so das ich die daten aus den download_manager auch zu den jeweiligen links anzeigen kann

    danke für deine bemühungen .

  • Dann musst Du es genau andersrum machen. Die Tabelle musik_config ist deine Haupttabelle. Folglich musst Du diese auch als solche ansprechen.

    SQL
    SELECT * FROM e107_mp3_music_config

    Dadurch erhälst Du eine Liste aller Einträge in music_config mit allen Einträgen. Jetzt möchtest Du zu jedem der Einträge auch noch die Anzahl der Klicks ausgeben die in e107_mp3_download_manager gespeichert sind. Also wird JOIN eingesetzt:

    SQL
    SELECT * 
    FROM e107_mp3_music_config AS mc
    LEFT OUTER JOIN e107_mp3_download_manager AS dm ON dm.filename = mc.mp3

    Dadurch würden sich die Einträge jedoch abhängig von der Anzahl download_manager vervielfachen. Also kommt GROUP zum Einsatz:

    SQL
    SELECT *, COUNT(dm.filename) AS klickanzahl
    FROM e107_mp3_music_config AS mc
    LEFT OUTER JOIN e107_mp3_download_manager AS dm ON dm.filename = mc.mp3
    GROUP BY mc.mp3

    Wenn es das auch nicht ist was Du willst, hast Du immernoch etwas ungünstig formuliert.