[Thema] [PHP & SQL] 2 Datensätze nur 1 x ausgeben

Dieses Thema im Forum "Webentwicklung" wurde erstellt von NS5, 16. Januar 2008 .

  1. 16. Januar 2008
    [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    Hallo zusammen,

    habe folgendes kleine Problem in PHP bzw. SQL und komme da gerade nicht weiter. Warscheinlicht recht simpel für euch ^^
    Das ganze ist in 3 Tabellen aufgebaut und hat folgende Struktur :

    Tabelle tblmovies :

    Code:
    ID Title
    1 La La La
    2 Blu Blu Blu
    Tabelle tblcountry :

    Code:
    ID ShortName
    1 UK
    2 USA
    Tabelle tblmoviesincountry (Referenztabelle) :

    Code:
    tblMovies_Id tblCountry_ID
    1 1
    1 2
    2 1
    Mit folgender Abfrage listet er mir alle Datensätze aus der Tabelle tblmovies auf inkl. der Informationen aus der Tabelle tblcountry. Über die Referenztabelle lässt sich da ja schön ein Bezug herstellen :

    Code:
    SELECT * 
    FROM tblmovies AS m, tblcountry AS c, tblmoviesincountry AS mc 
    WHERE mc.tblMovies_Id = m.ID AND mc.tblCountry_ID = c.ID 
    ORDER BY m.Inserted DESC LIMIT 0,5;
    Problem bei der Abfrage ist allerdings dass er mir den Datensatz 1 aus der tblmovies 2 mal auflistet da er auch 2 Einträge in der tblcountry Tabelle bzw. deren Referenztabelle besitzt. In wie weit muss ich jetzt die SQL Abfrage abändern dass er mir den Datensatz an sich nur ein mal anzeigt aber zusätlich noch die Information dass er in UK und USA spielt ? Habs schon mit GROUP BY probiert, allerdings verschluckt er da ja einen Datensatz.

    Eine Möglichkeit wäre hier an Hand der tblmovies.ID auf die Referenztabelle zuzugreifen und zu gucken wie viel Einträge es für die tblmovies.ID gibt. Mit der Anzahl dann eine Schleife durchlaufen lassen und eine Variable dann immer mit den tblcountry.shortname füllen bzw. anhängen was ja gehen müsste da ich ja so auch Zugriff auf diese Tabelle habe.

    Allerdings habe ich keine Ahnung wie ich da anfangen bzw. das umsetzen soll oder ob das überhaupt so geht.

    Bin um jede Antwort dankbar.

    Greetz
    NS5
     
  2. 16. Januar 2008
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    PHP->Webtechnik.

    ~moved~

    Mfg,

    Kolazomai
     
  3. 16. Januar 2008
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    du kannst doppelte einträge mittels UNION zusammenfügen... das ist eigentlich das gleiche wie GROUP BY nur halt verkürzt ^^

    ob es auch bei MySQL geht must du ausprobieren ich kenne das nur vom SQL-Server 2000 ...

    SQL Union - 1Keydata SQL-Tutorial <- kannst du dir ja mal angucken

    greetz Mutator
     
  4. 16. Januar 2008
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    select mc.* from tblmoviesincoutry as mc
    join tblmovies as m on mc.tblmovies_id=m.id
    join tblcounty as c on mc.tblcountry_id=c.id
    order by m.title

    ?

    bin ich eigentlich der einzige, der die bezeichnungen (z.b. "tblcountry_id" und "tblmoviesincountry") für suboptimal hält?
     
  5. 16. Januar 2008
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    @ Mutator : Keine schlechte Idee. Das Problem ist nur dass die 2 Ausgaben nach der SQL Anweisung ja nicht komplett identisch sind. Wie handhabt er dass denn dann mit dem ShortName Feld. Kannst du mal ein Beispiel posten wie du das dir gedacht hast ?
     
  6. 17. Januar 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    Hier nochmal kurz was um das Problem etwas zu veranschaulichen.
    Die Datenbank - bzw. Tabellenstruktur steht ja oben.

    Auf diese wird dann folgender SQL Befehl angewendeT :

    Bild
    {img-src: http://img81.imageshack.us/img81/6138/unbenannt01ac7.png}


    Die Ausgabe sind einfach alle Einträge der tblmovies inkl. derer aus der tblcountry auf die durch die tblmoviesincountry referenziert wurde. Wichtig ist hier allerdings nur die beiden ID Spalten :

    {bild-down: http://img251.imageshack.us/img251/2928/unbenannt05qg8.png}


    Der Film 5 hat somit 2 Country Einträge. Wenn ich nun das komplette Ergebnis der Abfrage über eine Schleife ausgeben lasse, listet er mir natürlich den kompletten Film 2 mal auf. Einmal für und mit der Country ID 2 und einmal die 3.

    Das will ich aber nicht. Ich möchte einen Eintrag für den Film 5 haben, allerdings dann direkt mit beiden Country IDs also es sollte dann quasi folgendes da stehen : Country 1 / Country 2 und nicht 2 komplett neue Einträge für den Film.

    Über folgenden Befehl kann ich mir die Movie IDs inkl. der Anzahl angeben wie oft für den Film ein Countryeintrag vorhanden ist :

    {bild-down: http://img251.imageshack.us/img251/4410/unbenannt03pp1.png}


    {bild-down: http://img297.imageshack.us/img297/7053/unbenannt04yl4.png}


    Und da steh ich momoentan auf dem Schlauch. Wie kann ich das Ergebnis am besten auswerken so dass ich keine 2 Einträge vorfinde, sondern 1 Eintrag mit den 2 Daten wie oben beschrieben.

    Besten Dank im Vorraus.
     
  7. 17. Januar 2008
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    schau dir mal GROUP_CONCAT an, vielleicht bringt dich das weiter. damit kannst du mehrere spalten zu einer einzigen verketten.
     
  8. 17. Januar 2008
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    Genial. Genau das hab ich gesucht. Das bringt mich schon um einiges weiter ^^ Hab schon gedacht dass es irgendwas zum GROUP BY geben muss um die Strings aneinander zu klatschen, hab aber nix gefunden.

    Wenn ich jetzt folgenden Befehl under phpMyAdmin eingebe bekomme ich auch schön den Film mit der ID 5 angezeigt und in der 2. Spalte steht dann Country 1 / Country 2.

    Code:
    SELECT m.Title, GROUP_CONCAT (c.ShortName SEPARATOR ' / ') 
    FROM tblmovies AS m, tblcountry AS c, tblmoviesincountry AS mc
    WHERE mc.tblMovies_Id = m.ID
    AND mc.tblCountry_ID = c.ID
    GROUP BY m.Title;
    Wenn ich den aber jetzt in meiner Page einbinde bringt er mir folgende Meldung :

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ... line 99

    ... in welcher folgends steht ...

    $anz = mysql_num_rows ($sqlerg);

    Ne Ahnung an was das liegen kann ? Kann es sein dass der mit der Syntax diese Group_Concat aus welchen Gründen nicht klar kommt und das irgendwie verhunzt ? Bin hier gerade mal auf die Suche genangen.

    BW ist dir aber schonmal sicher. Besten Dank.
     
  9. 17. Januar 2008
    AW: [PHP & SQL] 2 Datensätze nur 1 x ausgeben

    Hat sich erledigt.
    Hab das Problem gefunden.
    Mal bis morgen warten ob sich noch was ergibt, sonst kann er zu gemacht werden.
    Nochmal Thx.
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.