Ankündigung

Einklappen
Keine Ankündigung bisher.

Anzahl der Verschiedenen Kombinationen

Einklappen

Neue Werbung 2019

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

  • Anzahl der Verschiedenen Kombinationen

    Ich habe eine Tabelle mit den Spalten



    ID | UserID | X | Y



    Die einzelnen Zeilen repräsentieren Einheiten in einem mini-spiel.



    Ein Auszug aus der Tabelle könnte sein:

    Code:
    +--+------+-+-+
     
    |ID|UserID|X|Y|
     
    +--+------+-+-+
     
    | 1|     1|0|3|
     
    +--+------+-+-+
     
    | 2|     1|0|3|
     
    +--+------+-+-+
     
    | 3|     2|0|2|
     
    +--+------+-+-+
     
    | 4|     2|1|0|
     
    +--+------+-+-+
     
    | 5|     3|1|1|
     
    +--+------+-+-+
     
    | 6|     3|1|1|
     
    +--+------+-+-+
     
    | 7|     4|4|2|
     
    +--+------+-+-+
     
    | 8|     4|2|4|
     
    +--+------+-+-+
     
    | 9|     4|3|3|
     
    +--+------+-+-+


    wobei die Einheiten jedes Users nicht zwingend untereinander stehen.



    Nun möchte Ich wissen, auf wievielen Feldern jeder einzelne User Einheiten hat.

    Die Gewünschte Ausgabe ist also:

    Code:
    +------+------+
     
    |UserID|Anzahl|
     
    +------+------+
     
    |     1|     1|
     
    +------+------+
     
    |     2|     2|
     
    +------+------+
     
    |     3|     1|
     
    +------+------+
     
    |     4|     3|
     
    +------+------+


    Es ist kein Problem, einfach alles aus der Tabelle auszulesen und dann mit php auszuwerten. Ich möchte wegen der Performance jedoch alles mit einem Query schaffen, und dafür reichen meine Mysql Kenntnisse leider nicht aus.



    Achja, falls das ne Rolle spielt: Mysql Version ist: 4.1.13-nt


  • #2
    Benutze einfach COUNT() zusammen mit GROUP BY:
    Code:
    SELECT
        COUNT(*) AS Anzahl,
        UserID
    FROM
        tabelle
    GROUP BY
        UserID

    Kommentar


    • #3
      Doppelte Einträge wie 1 & 2 solltest du auch verhindern (dafür gibts den kombinierten PrimaryKey)

      Kommentar


      • #4
        Zitat von xabbuh
        Benutze einfach COUNT() zusammen mit GROUP BY:
        Code:
        SELECT
            COUNT(*) AS Anzahl,
            UserID
        FROM
            tabelle
        GROUP BY
            UserID
        Nein, damit bekomme Ich die Anzahl der Einheiten, die der User hat. Ich möchte aber wissen, auf wie vielen verschiedenen Feldern der User Einheiten hat.

        Doppelte Einträge wie 1 & 2 solltest du auch verhindern (dafür gibts den kombinierten PrimaryKey)
        Da sehe ich den Sinn nicht. Es ist durchaus im Sinne des Spiels, dass mehrere Einheiten auf dem gleichen Feld stehen, solange sie dem gleichen User gehören.

        Kommentar


        • #5
          Dann würde ich aber eher eine neue Spalte mit der Anzahl der darauf befindlichen Einheiten anlegen, sofern das halbwegs oft vorkommt.

          Keine Ahnung obs klappt, geht vielleicht
          Code:
          SELECT
              COUNT(DISTINCT(UserID,X,Y)) AS anzahl,
              UserID
          FROM 
              tabelle
          GROUP BY
              UserID

          Kommentar


          • #6
            versuchs mal so:
            Code:
            SELECT
               t1.UserID,
               COUNT(t1.UserID) AS anzahl
            FROM
               tabelle AS t1
            LEFT JOIN
               tabelle AS t2
               ON t1.UserID = t2.UserID
               AND
               CONCAT(t1.X ,',' ,t1.Y) <> CONCAT(t2.X ,',' ,t2.Y)
            WHERE
               t2.Userid IS NOT NULL
            GROUP BY
               t1.UserID
            ~dilemma~

            Kommentar

            Lädt...
            X