[MySQL 3.23.X] Unterschiedliche Anzahl mehrerer Bedingungen - WICHTIG!!!

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

  • [MySQL 3.23.X] Unterschiedliche Anzahl mehrerer Bedingungen - WICHTIG!!!

    Hallo Leute,
    bin neu hier und habe gleich ein recht komplexes und aussergewöhnliches Problem:


    Um es vorweg zu sagen, ich betreibe ein Onlinegame und habe hier ein sehr merkwürdiges Problem...

    Tabellen:
    #1:
    Ich habe eine Tabelle bedingungen, wo eine Spalte forschungen heisst. der Inhalt dieser Spalte enthält sowas hier: Aerodynamik,Ballistik,Bla,Bla,Blubb
    Die Anzahl dieser Aufzählungen ist aber je Datensatz unterschiedlich.

    #2:
    In dieser Tabelle stehen alle Forschungen die dieser Benutzer bereits hat. Je Forschung ein Datensatz.

    Problem:
    Ich möchte alle Datesätzer der Tabelle #1 Selektieren, für die ich alle Forschungen schon habe. Im Beispiel also Aerodynamik,Ballistik,Bla,Bla,Blub.

    Doch wie stell ich das an? Meine Überlegungen gingen schon in Richtung PHP; einfach einen explode zu machen. Doch da bin ich gescheitert weil ich nciht weiß wie ich das genau machen soll. Ich hatte auch schon überlegt pro Forschung die benötigt wird in Tabelle #2 eine eingene Spalte anzulegen. Ich denke mal in diese Richtung müsste der Lösungsansatz gehen. Doch wie finde ich heraus welche Forschungen ich schon habe und wie vergleiche ich sie mit den Daten in Tabelle #2 ?

    Ich danke euch schon jetz für eure Mühe

    MfG
    Skyrunner

  • #2
    also explode implode is schon mal nicht schlaecht dann noch in_array und es geht.
    Du könntest aber Deine tabelle bedingungen auch normalisieren ähnlich hast Du ja die Tabelle #2 auch schon ...
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Re: [MySQL 3.23.X] Unterschiedliche Anzahl mehrerer Bedingungen - WICHTIG!!!

      OffTopic:
      Original geschrieben von Skyrunner
      [i]Hallo Leute,
      bin neu hier u[...]
      das erlaubt dir aber dennoch nciht die verwendung von worten wir WICHTIG!!! im betreff des threads.

      ach im übrigen lese ich solche threads zwar, aber antworte meistens nicht.

      hier wird jeder gleich geholfen. aber die die drängeln, werden sich hinten anstellen müssen.
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        @haxe komm Du liest jeden Thread also sei nicht so :-)
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          uups....
          Tut mir leid, wollte nciht den Eindruck erwecken zu drängeln.
          Wenn ein Mod da ist kann es ja wieder entfernt werden

          @Mello:
          Könntest du das etwas konkretisieren?
          Ich verstehe nciht so ganz wie du das meinst.

          Und noch eine Frage:
          Ist an dieser Stelle ein JOIN möglich? oder muss ich doch den weg über das Array gehen?

          MfG
          Skyrunner

          Kommentar


          • #6
            klar konkret heisst das: Haxe liest jeden thread
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Ich glaube das geht nciht so gut mit in array und explode.
              Denn ich will ja nur ein mysql Query haben für die auflistung der Daten aus Tabelle #1.

              MfG
              Skyrunner

              Kommentar


              • #8
                @ Schweinshaxe:
                Er ist Noob und hat höfflich gefragt!

                @Skyrunner:

                $sql = "SELECT A.forschungen FROM tab1 AS A INNER JOIN tab2 AS B ON (A.spieler_id=B.spieler_id AND A.forschungen=B.forschungen)";

                oder

                $sql = "SELECT A.forschungen FROM tab1 AS A INNER JOIN tab2 AS B ON A.spieler_id=B.spieler_id WHERE A.forschungen=B.forschungen";

                cu

                Blaster
                Zuletzt geändert von Blaster; 15.12.2003, 17:41.
                Yuppi, endlich Elite ...

                Kommentar


                • #9
                  @blaster das wird nicht gehen, da in der einen Tabelle in einem feld mehrere mit komma getrennte begriffe stehen.
                  evt hilft in der situation die FIND_IN_SET() funktion
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    @MelloPie:
                    Das erste funzt totsicher!
                    Die zweite Variante habe ich noch nie probiert...
                    Yuppi, endlich Elite ...

                    Kommentar


                    • #11
                      @blaster wäre mir neu:
                      #1:
                      Ich habe eine Tabelle bedingungen, wo eine Spalte forschungen heisst. der Inhalt dieser Spalte enthält sowas hier: Aerodynamik,Ballistik,Bla,Bla,Blubb
                      Die Anzahl dieser Aufzählungen ist aber je Datensatz unterschiedlich.

                      #2:
                      In dieser Tabelle stehen alle Forschungen die dieser Benutzer bereits hat. Je Forschung ein Datensatz.

                      Nach Deinem Statement wäre die Bedingung erfüllt, wenn
                      tab1.forschung (Aerodynamik,Ballistik,Bla,Bla,Blubb) =
                      tab2.forschung (Aerodynamik)
                      ????

                      @skyrunner
                      Ein JOIN
                      wäre evt:
                      $sql = "
                      SELECT A.forschungen
                      FROM tab1 A JOIN tab2 B ON A.spieler_id=B.spieler_id
                      WHERE FIND_IN_SET(B.forschung,A.forschungen)>0
                      // nicht getestet
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #12
                        Mello hat Recht!
                        @Blaster:
                        In Tabelle #2 stehen die einzelnen forschungen in einzelnen Datensätzen.

                        //EDIT: Ich war zu spät ^^

                        EDIT2:
                        Hab das mal getestet, kommt aber ein fehler:
                        Code:
                        SELECT A.exp
                        FROM game_explore A JOIN game_waffen B ON A.land_id=B.land_id
                        WHERE FIND_IN_SET(B.exp,A.forschungen)>0
                        Fehler:
                        #1064 - You have an error in your SQL syntax near 'ON A.land_id = B.land_id
                        WHERE FIND_IN_SET( B.exp, A.forschungen ) > 0 LIMIT 0,' at line 3


                        ich denke mal ich muss die land_id irgendwie vordefinieren oder? Zur Klarstellung: game_explore -> Tabelle mit exp als Name der Forschung

                        Achja und es müssen ALLE Forschungen in game-waffen auch wirklich in game_explore vorhanden sein.

                        EDIT: Fehler gefunden... In Tabelle game_waffen gibts garkeine land_id! Das ist ne statische Tabelle somit sind da einfach nur alle waffen aufgelistet. Wie müsste das query unter berücksichtigung dieser tatsache lauten=?
                        Zuletzt geändert von Skyrunner; 15.12.2003, 18:41.

                        Kommentar


                        • #13
                          Original geschrieben von MelloPie
                          @blaster ...Tabelle in einem feld mehrere mit komma getrennte begriffe stehen....
                          Ach so! Gar nicht richtig gelesen!
                          So ein Quatsch-DB Design realisiert ich erst gar nicht...
                          Eine simple m:n _ Beziehungstabelle hätte den Stress wohl reduziert.
                          Yuppi, endlich Elite ...

                          Kommentar


                          • #14
                            Hmm, wie meinst du das? Könntest du das mal bitte am Beispiel erklären?

                            MfG
                            Skyrunner

                            Kommentar


                            • #15
                              na normalisieren eben
                              Tabelle 1:
                              ID,sonstige cols
                              Tabelle forschungen
                              ID, name
                              Zwischentabelle
                              Tabelle1.ID, forschungen.ID
                              Beantworte nie Threads mit mehr als 15 followups...
                              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                              Kommentar

                              Lädt...
                              X