Count, 2 Splaten

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

  • Count, 2 Splaten

    Tach Leute,

    Einleitung:

    Bin am programmieren eines Weltraum stradegie Browsergame.
    Das Game soll eine speziele Karte haben, die wie ein Kordinatensystem aufgebaut ist. bsp.: 10 X 10. Auf der Karte kann man dann sehen wo welche schiffe oder stationen stehen. Dies bekommt man mit Bilder angezeigt. Und hier kommt mein Problem. Ich will, wenn mehrere schiffe auf einen ort sind ein anderes Bild angezeigt werden.

    Problem:


    Gibt es einen SQL script, wie man überprüfen kann, wie viele einträge die gleichen spalten einträge haben. dabei soll nur 2 Spallten gezählt werden. Dies dann noch erstmal nach y ordnen dann nach x. (schwer zu erklären)



    Tabelle binhaltet:

    id
    xpos
    ypos


    xpos und ypos für die Kordinaten




    und sieht so aus:

    ID | ypos | xpos
    -------------------------
    1 | 5 | 7
    2 | 3 | 2
    3 | 9 | 1
    4 | 5 | 7
    5 | 3 | 2
    6 | 4 | 8
    7 | 3 | 6
    8 | 3 | 2



    Ergebnis soll dann so aussehen:

    ypos | xpos | id | anzahl
    ------------------------------------
    3 | 2 | 2 | 3
    3 | 2 | 5 | 3
    3 | 2 | 8 | 3
    3 | 6 | 7 | 1
    4 | 8 | 6 | 1
    5 | 7 | 1 | 2
    5 | 7 | 4 | 2
    9 | 1 | 3 | 1


    Danke für eure mühe!!

    MfG Dave

  • #2
    count () und group by oder having count
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Tach,

      Wie soll ich das machen?

      SELECT ypos, xpos, count(*) AS anzahl
      FROM objekt
      GROUP BY ypos, xpos;


      Das funzt, aber ist noch nicht ganz das, was ich will..., wenn ich die ID hinzufüge:

      SELECT ypos, xpos, id, count(*) AS anzahl
      FROM objekt
      GROUP BY ypos, xpos;


      dann hab ich in anzahl über all nur einsen, ist klar.
      Hab deswegen versucht:

      SELECT ypos, xpos, id, count(xpos,ypos) AS anzahl
      FROM objekt
      GROUP BY ypos, xpos;

      Oder so ähnlich.

      will nähmlich noch mehr hinzufügen, als nur die ID.

      Wie soll ich das machen?

      Kommentar


      • #4
        ahja jetzt hab ichs gesehen
        wenn Du eine DB hast die folgendes kann:
        Code:
        SELECT a.id, a.ypos, a.xpos, b.anzahl
        FROM objekt a
         JOIN ( 
          SELECT ypos, xpos, count(  *  ) anzahl
          FROM objekt
          GROUP  BY ypos, xpos ) b 
        ON ( a.xpos = b.xpos )  AND ( a.ypos = b.ypos )
        ORDER BY a.ypos, a.xpos, a.id;
        ansonsten würde ich das im Coding machen also zwei abfragen und in nem array vereinen...
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          oder eben ne temporary table benutzen...
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            Hoi...,

            Wie du es geschrieben hast, müsste es klappen..., nur das noch paar fehler drin sind..., muss sie noch irgendwie raus suchen. z.B. kann man einfach nur JOIN hinschreiben? eigentlich nicht oder?

            Naja egal. dein zweiter vorschlag war auch nicht schlecht. ich hab es auch bis jetzt so ähnlich gemacht. bin aber nicht weiter gekommen, wenn ich paar funktionen mehr hinzu gefügt habe. das ganze wird zu unübersichtlich!

            Kommentar


            • #7
              kann mir jemand helfen die fehler raus zu suchen? danke!

              Kommentar


              • #8
                benutze ein temporary table
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9
                  MelloPie, danke für deine hilfe!

                  ich habs jetzt. Ich hab einfach paar fehler beseitigt und es klappt wunderbar, danke noch mal!


                  Hier die Lösung!


                  Code:
                  SELECT a.ypos, a.xpos, a.id, b.anzahl
                  FROM objekt AS a INNER JOIN [SELECT ypos, xpos, count(* ) AS anzahl  
                                          FROM objekt
                                          GROUP  BY ypos, xpos ]. AS b ON (a.ypos=b.ypos) AND (a.xpos=b.xpos)
                  ORDER BY a.ypos, a.xpos, a.id;

                  Kommentar

                  Lädt...
                  X