Ergebnis 1 bis 3 von 3

Thema: SQL Prolem mit INNER JOIN

  1. #1
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard SQL Prolem mit INNER JOIN

    Hi,
    ich habe da folgendes Problem:
    ich will daten aus 3 tabellen verbinden.
    Tabelle items
    Code:
    id | name | group_id
    ---+------+----------
     1 |Test1 | 1
    ---+------+----------
     2 |Test2 | 2
    ---+------+----------
     3 |Test3 | 1
    ---+------+----------
     4 |Test4 | 3
    ---+------+----------
     5 |Test5 | 3
    ---+------+----------
     6 |Test2 | 2
    Tabelle gruppen
    Code:
    id |  name   |
    ---+---------+
     1 | Gruppe1 
    ---+---------+
     2 | Gruppe2
    ---+---------+
     3 | Gruppe3
    ---+---------+
    Tabelle group_joins
    Code:
    user | group
    -----+-------
     1   |   1
    -----+-------
     3   |   2
    -----+-------
     1   |   2
    -----+-------
     11  |   1
    -----+-------
     12  |   2
    -----+-------
     13  |   1
    So, jetzt will ich 5 gruppen haben undzwar ihre id, ihre mitglieder und die items, die zu der gruppe gehören.
    Bisher habe ich folgendes versucht:
    Code:
    SELECT
        groups.id
            AS id,
        groups.name
            AS name,
        COUNT(items.id)
            AS videos,
        COUNT(group_joins.user)
            AS members
    FROM
        groups
    INNER JOIN
        items
            ON (items.group_id=groups.id)
    INNER JOIN
        group_joins
            ON (group_joins.group=groups.id)
    ORDER BY
        RAND()
    LIMIT
        5
    Aber ich erhalte immer folgende ausgabe:
    Code:
    id |  name   | videos | members
    ---+---------+--------+---------
     1 | Gruppe1 | 5      | 5
    Dabei hat die gruppe1 drei mitlgieder und 2 videos...

    Hat da irgendjemand eine idee? Ich komm nicht weiter
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Geändert von Tobse (15.02.2011 um 21:48 Uhr)
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  2. #2
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: SQL Prolem mit INNER JOIN

    Probier mal:
    Code:
    SELECT
    	groups.id
    		AS id,
    	groups.name
    		AS name,
    	COUNT(items.id)
    		AS videos,
    	COUNT(group_joins.user)
    		AS members
    FROM
    	groups
    	INNER JOIN
    		items
    		ON (items.group_id=groups.id)
    	INNER JOIN
    		group_joins
    		ON (group_joins.group=groups.id)
    GROUP BY
    	name
    ORDER BY
    	RAND()
    LIMIT
    	5
    Wenn du Aggregations-Funktionen verwendest erwartet SQL eine GROUP BY-Klausel. Ansonsten kommen i.d.R. völlig unerwartete Ergebnisse.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  3. #3
    Kaiser(in)
    Themenstarter

    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: SQL Prolem mit INNER JOIN

    Das Ergebnis sieht schon besser aus, ist aber immernoch falsch...
    Würde es sinn machen, die mitgliederzahl zusätzlich in die Gruppentabelle zu schreiben? Der befehl mit nur den items als JOIN funktioniert einwandfrei.

    EDIT:
    Ich habs geschafft, letztendlich mit subqueries und nicht mit joins.
    Code:
    SELECT
                groups.id
                    AS id,
                groups.name
                    AS name,
                (
                    SELECT
                        COUNT(group_joins.user)
                    FROM
                        group_joins
                    WHERE
                        group_joins.group=groups.id
                )
                    AS members,
                (
                    SELECT
                        COUNT(items.id)
                    FROM
                        items
                    WHERE
                        items.group_id=groups.id
                )
                    AS items
            FROM
                groups
            GROUP BY
                groups.name
            ORDER BY
                RAND()
            LIMIT 5";
    Geändert von Tobse (18.02.2011 um 21:55 Uhr)
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

Ähnliche Themen

  1. <div> und <iframe> Prolem!
    Von firefigther im Forum HTML & CSS Forum
    Antworten: 2
    Letzter Beitrag: 29.12.2007, 14:26
  2. Prolem bei der Ausgabe einer MySQL Abfrage
    Von Webdesignerin im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 21.11.2007, 00:17
  3. Prolem mit skrollbalken
    Von gelöschter User im Forum HTML & CSS Forum
    Antworten: 13
    Letzter Beitrag: 13.04.2007, 08:43
  4. sql - join
    Von phore im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 11
    Letzter Beitrag: 29.06.2005, 12:44
  5. Prolem mit popup window
    Von rez0p0lis im Forum HTML & CSS Forum
    Antworten: 12
    Letzter Beitrag: 31.03.2005, 19:37

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •