kai: Mysql join der mir den kopf zerbricht

hallo zusammen ...
ich habe glaube ich momentan einfach eine denkblokade ..
hoffe ihr könnt mir helfen ..
also ich habe in meinem browsergame u.a. 2 tabellen
in der einen sind die einheiten alles users in der anderen alle armeen.
in einer armee können x einheiten sein aber natürlich nur von
dem einen user dem einheiten und armee gehören..
also hat tab einheiten eine user_id und eine armee_id und tab armeen
hat auch eine user_id und eine Armee_id .

beide tabellen haben auch eine x wert der die position auf der
landkarte angiebt... nun kommt es vor das die einheiten nicht richtig
"mitgezogen" werden wenn sich die armee in der sie sind bewegt.

also möchte ich einfaach eine sql machen die:
alle einheiten x werte auf den x wert ihrer armee setzt zu der sie gehören... und da verzweifel ich gerade dran .. das muss doch gehen.
mal in worten:
UPDATE user_einheiten SET x=armme_x WHERE einheits_armee_id=armee_id

aber so ganz bekomme ich es halt nicht hin..
kai

  1. Hallo Kai,

    hoffe ihr könnt mir helfen ..

    prinzipiell ja, aber dazu benötigen wir Angaben von Dir:

    also ich habe in meinem browsergame u.a. 2 tabellen

    [...]

    hat auch eine user_id und eine Armee_id .

    Ich kann mir auch nach mehrfacher Lektüre des vorhergehenden Abschnitts immer noch nicht den Aufbau Deiner Tabellen vorstellen. Bitte gib' doch einfach den Aufbau an:

    Tabelle beispiel
      spalte1
      spalte2
      ...

    alle einheiten x werte auf den x wert ihrer armee setzt zu der sie gehören... und da verzweifel ich gerade dran .. das muss doch gehen.

    Auch die Aufgabe verstehe ich nicht :-(
    Was sind "einheiten x werte"?
    Was ist der "x wert ihrer armee"?

    Könntest Du das bitte etwas klarer fassen, damit wir Dir helfen können.

    Freundliche Grüße

    Vinzenz

    1. hallo,
      sorry hätte ich ja doch von anfang an machen können:

      Tabelle: user_einheiten
        ue_id
        user_id
        e_id
        hitpoints
        menge
        armee_id
        name
        x

      Tabelle: user_armeen
          armee_id
        name
        user_id
        schlacht_id
        x
        bild

      und ich möchte nun das alle einheiten aus user_einheiten die zu
      einer amee in user_armeen gehören  armee_id<->armee_id
      den selben x wert bekommen wie ihre armee .
      alle id und x felder sind INT(11)..

      hoffe diesmal war ich deutlicher  :-)

      kai

      1. Hallo Kai,

        so ganz verstehe ich die Zusammenhänge zwischen diesen beiden Tabellen noch nicht. So sehe ich den Aufbau Deiner Tabellen:

        In der Tabelle user_einheiten sind die Einheiten aller User aufgeführt.

        Tabelle: user_einheiten

          
        
        >   ue_id      /* Primärschlüssel, identifiziert Datensatz */  
        >   user_id    /* User, dem die Einheiten gehören */  
        >   e_id       /* Art der Einheiten */  
        >   hitpoints  /* Zustand der Einheiten */  
        >   menge      /* Anzahl der Einheiten */  
        >   armee_id   /* Zuordnung zu einer Armee */  
        >   name       /* unbekannt */  
        >   x          /* Ort der Einheiten */  
        
        

        Tabelle: user_armeen

        [code lang = sql]

        armee_id      /* Primärschlüssel, identifiziert Armee */
          name          /* Name der Armee */
          user_id       /* User, dem die Armee gehört */
          schlacht_id   /* Schlacht, an der die Armee teilnimmt? */
          x             /* Position, an der sich die Armee befindet */
          bild          /* Bild der Armee */

        [/code]

        Hab' ich das so richtig verstanden? Wenn ja, dann pflegst Du etliche Daten doppelt.

        Wenn Einheiten einer Armee zugordnet sind, dann haben sie die Position der Armee. Es könnte natürlich auch sein, dass 'user_einheiten.x' die aktuelle Position der Einheiten angibt, die sich in Richtung 'user_armeen.x' bewegen. Was davon der Fall ist, weiß nur Deine Spiellogik.

        Weiter gehe ich davon aus, dass eine Armee eines Benutzers nur aus Einheiten dieses Benutzers besteht. Wenn dies der Fall ist, reicht die Zuordnung der Einheiten zu einer Armee, um die Einheiten eindeutig einem Benutzer zuzuordnen. Wenn es sein kann, dass Einheiten noch keiner Armee zugeordnet sind, dann ist die Zuordnung von Einheiten zu einem Benutzer sinnvoll :-)

        und ich möchte nun das alle einheiten aus user_einheiten die zu
        einer amee in user_armeen gehören  armee_id<->armee_id
        den selben x wert bekommen wie ihre armee .
        alle id und x felder sind INT(11)..

        Können Einheiten ohne Zuordnung zu einer Armee vorkommen?
        Sollen Einheiten immer den gleichen x-Wert haben, wie die Armee, der sie zugeordnet sind?

        Wenn Du die erste dieser Fragen mit "Nein" und die zweite mit "Ja" beantwortest, dann lasse einfach die Spalte x in der Tabelle 'user_einheiten' weg. Die Position der Einheiten ist ja die gleiche wie die der Armee, der sie zugeordnet sind; und die bekommst Du über einen einfachen JOIN heraus.

        Freundliche Grüße

        Vinzenz

  2. yo,

    beide tabellen haben auch eine x wert der die position auf der
    landkarte angiebt... nun kommt es vor das die einheiten nicht richtig
    "mitgezogen" werden wenn sich die armee in der sie sind bewegt.

    das ist wohl ein fehler im datendesign. wenn die position immer von der tabelle armee abhängt, dann sollte auch nur da eine spalte für die position vorhanden sein, es sei denn einheiten können unabhängig von der armee ihre eigene position besitzen. dann solltest du dir auch den update spären können.

    Ilja