Ankündigung

Einklappen
Keine Ankündigung bisher.

Variationen aus der DB Filtern

Einklappen

Neue Werbung 2019

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

  • Variationen aus der DB Filtern

    Hey,

    meine Datenbank sieht zur zeit so aus:
    ID|pos1 |pos2 |pos3 | pos4 | pos5
    1 |zwei0 |zwei1 |zwei2 | drei0 | drei1
    2 |zwei0 |zwei1 | zwei2 | drei1 | drei0
    3 |zwei0 |zwei1 | zwei2 | drei2 | drei3
    .
    .
    .

    So wie ich jetzt meine DB habe, habe ich verschiedene Variationen wie in den ersten beiden Zeilen:
    1 |zwei0 |zwei1 |zwei2 | drei0 | drei1
    2 |zwei0 |zwei1 | zwei2 | drei1 | drei0



    im später Programmablauf macht mir das Probleme, daher darf / muss immer nur eine Kombination in der DB gespeichert sein. Also nur noch eine Kombination und keine verschiedenen Variationen.

    ich hab an sowas gedacht allerdings funktioniert das nicht so ganz und ich kann mir nicht erklären warum:

    PHP-Code:
    <?php

    $host 
    "XXX";
    $user "XXX";
    $pw "XXX";
    $db "XXX";

    $verb mysql_connect($host$user,$pw);

    mysql_select_db($db$verb);

    $sql "SELECT * FROM drilling";
    $erg mysql_query($sql$verb);


    while (
    $zeile mysql_fetch_object($erg)) {
     
    $pos1 $zeile->pos1;
    $pos2 $zeile->pos2;
    $pos3 $zeile->pos3;
    $pos4 $zeile->pos4;
    $pos5 $zeile->pos5;
    $i 0;
        while (
    $row mysql_fetch_array($erg)) {
            
    $i++;
            echo 
    "innen<br />";
            if(
    $pos1 == $row[1] && $pos2 == $row[2] && $pos3 == $row[3] && $pos4 == $row[5] && $pos5 == $row[4]) {
            
    $sql "DELETE FROM drilling WHERE ID = $i";
            }
        }

    }
    ?>
    jetzt benötige ich einen Tipp wie ich das geschickter mach als mit einem solchen Script oder jemand könnte mir sagen wo das Problem im Script liegt

    Lieben Gruß Phil


  • #2
    Zitat von PhilGB Beitrag anzeigen
    meine Datenbank sieht zur zeit so aus:
    ID|pos1 |pos2 |pos3 | pos4 | pos5
    1 |zwei0 |zwei1 |zwei2 | drei0 | drei1
    2 |zwei0 |zwei1 | zwei2 | drei1 | drei0
    3 |zwei0 |zwei1 | zwei2 | drei2 | drei3
    Erläutere doch bitte erst mal, was für ein Datenmodell das darstellen soll - was für Daten sind das, die du da abbilden willst, und was für ein Ergebnis möchtest du daraus erhalten; und liefere dann ein CREATE-TABLE-Statement und INSERTS für ein paar Beispieldaten, damit man das praktisch nachvollziehen kann.

    Kommentar


    • #3
      Zitat von PhilGB Beitrag anzeigen
      Hey,

      meine Datenbank sieht zur zeit so aus:
      ID|pos1 |pos2 |pos3 | pos4 | pos5
      1 |zwei0 |zwei1 |zwei2 | drei0 | drei1
      2 |zwei0 |zwei1 | zwei2 | drei1 | drei0
      3 |zwei0 |zwei1 | zwei2 | drei2 | drei3
      Das eigentliche Problem hier dürfte der Aufbau Deiner Tabelle sein. Die sollte entsprechend normalisiert werden, dann sind die späteren SQL-Abfragen einfacher zu handhaben.

      Grober Vorschlag einer neuen Tabelle wäre:

      Code:
      CREATE TABLE tabelle (
       id INT NOT NULL,
       pos INT NOT NULL,
       wert VARCHAR(10) NOT NULL,
      
       PRIMARY KEY (id)
      );
      
      INSERT INTO tabelle VALUES
      ( 1, 1, 'zwei'),
      ( 2, 2, 'zwei'),
      ( 3, 3, 'zwei')
      ..
      EDIT
      Eine Erklärung was Du genau machen möchtest, wäre auch sehr hilfreich.

      Grüße
      Thomas

      Kommentar


      • #4
        ich möchte eine Datenbank erstellen mit allen möglichen Drillingen eines Pokerblatts
        die ausgeschriebene Zahl ist bei mit 2 - A und 0 - 3 sind Pick, Herz Caro Kreuz
        so fängt meine DB so an:
        (ID)Pos1 Pos2 Pos3 Pos4 Pos5

        Ass3 Ass2 Ass1 konig0 dame0 //hier werden die Farben im vierer Zahlensystem hochgezählt
        Ass3 Ass2 Ass1 konig1 dame0
        Ass3 Ass2 Ass1 konig2 dame0
        Ass3 Ass2 Ass1 konig3 dame0
        Ass3 Ass2 Ass1 konig0 dame1
        Ass3 Ass2 Ass1 konig1 dame1
        .
        .
        .
        Ass3 Ass2 Ass1 konig3 dame3
        Ass3 Ass2 Ass1 konig0 bube0
        Ass3 Ass2 Ass1 konig1 bube0
        ...
        Ass3 Ass2 Ass1 konig3 bube3
        ...
        Ass3 Ass2 Ass1 konig3 zwei3
        Ass3 Ass2 Ass1 dame0 konig0
        // und hier in der letzten Zeile entsteht schon die erste Variation denn ganz oben hat ich das Blatt ja schon so drin:
        (Ass3 Ass2 Ass1 konig0 dame0)
        (höheren Blätter wie Vierlinge, Fullhouse oder Flush sind schon raus)

        und hier noch wie die db aussieht
        CREATE TABLE IF NOT EXISTS `drilling` (
        `ID` int(10) NOT NULL auto_increment,
        `pos1` varchar(10) NOT NULL,
        `pos2` varchar(10) NOT NULL,
        `pos3` varchar(10) NOT NULL,
        `pos4` varchar(10) NOT NULL,
        `pos5` varchar(10) NOT NULL,
        PRIMARY KEY (`ID`)
        )

        ich hoffe ich könnt mir dabei helfen und ich konnte mich klar genug ausdrücken
        und noch als kleine Sahnehaube oben drauf:
        Ich kann / darf nur die doppelten Einträge entfernen und nicht die Reihenfolge durcheinander bringen, denn sonst würd das obere Blatt ja nicht mehr unbedingt das untere schlagen oder den gleichen Wert besitzen.


        Lieben Gruß Philipp

        Kommentar


        • #5
          Zitat von PhilGB Beitrag anzeigen
          ich möchte eine Datenbank erstellen mit allen möglichen Drillingen eines Pokerblatts
          die ausgeschriebene Zahl ist bei mit 2 - A und 0 - 3 sind Pick, Herz Caro Kreuz
          so fängt meine DB so an:
          Meiner Meinung nach ist das der falsche Ansatz, mögliche Ergebnisse zu speichern. Es kommt auch eine ganze Menge an Datensätzen zusammen.

          Es gibt 14 Karten und 4 Farben, also 54 Möglichkeiten pro Position
          Es gibt 5 Position , also 54*54*54*54*54 = 459.165.024 Möglichkeiten
          Die Dreier sind dann nur eine Teilemenge davon..

          Vielleicht ist hier jemand mathematisch so gut mal eine passende Formel für die Dreier zu entwerfen.

          Grüße
          Thomas

          Kommentar


          • #6
            ich habe das Problem umgangen, indem ich den letzten Positionen (also Pos4 und pos5) die Werte 1 bis 13 zugewiesen habe habe. (Ass = 13, Konig = 12 ...)
            Und dann hab ich gesehen, dass wenn ich alle Zeilen lösche wo die der Wert der Pos4 < des Werts der Pos5 ist, bekomm ich all die unnötigen Variationen raus und die Sortierung bleibt auch erhalten *freu*^^.

            da n Code mehr sagt als 1000 Wort...
            PHP-Code:
            <?php

            $host 
            "XXX";
            $user "XXX";
            $pw   "XXX";
            $db      "XXX";

            $verb mysql_connect($host$user$pw)
            or die (
            "FUCK CONNECTION");

            mysql_select_db($db$verb)
            or die (
            "FUCK DB SELECT");

            $sql "SELECT * FROM drilling";
            $erg mysql_query($sql$verb);
            $i 0;
            $j 0;
            while(
            $zeile mysql_fetch_object($erg)) {
            $i++;
            $pos4 substr($zeile->pos40, (strlen($zeile->pos4) - 1));
            $pos5 substr($zeile->pos50, (strlen($zeile->pos5) - 1));

                switch(
            $pos4) {
                    case 
            "ass":
                        
            $wert4 13;
                        break;
                    case 
            "konig":
                        
            $wert4 12;
                        break;
                    case 
            "dame":
                        
            $wert4 11;
                        break;
                    case 
            "bube":
                        
            $wert4 10;
                        break;
                    case 
            "zehn":
                        
            $wert4 9;
                        break;
                    case 
            "neun":
                        
            $wert4 8;
                        break;
                    case 
            "acht":
                        
            $wert4 7;
                        break;
                    case 
            "sieben":
                        
            $wert4 6;
                        break;
                    case 
            "sechs":
                        
            $wert4 5;
                        break;
                    case 
            "funf":
                        
            $wert4 4;
                        break;
                    case 
            "vier":
                        
            $wert4 3;
                        break;
                    case 
            "drei":
                        
            $wert4 2;
                        break;
                    case 
            "zwei":
                        
            $wert4 1;
                        break;
                }
                
                switch(
            $pos5) {
                    case 
            "ass":
                        
            $wert5 13;
                        break;
                    case 
            "konig":
                        
            $wert5 12;
                        break;
                    case 
            "dame":
                        
            $wert5 11;
                        break;
                    case 
            "bube":
                        
            $wert5 10;
                        break;
                    case 
            "zehn":
                        
            $wert5 9;
                        break;
                    case 
            "neun":
                        
            $wert5 8;
                        break;
                    case 
            "acht":
                        
            $wert5 7;
                        break;
                    case 
            "sieben":
                        
            $wert5 6;
                        break;
                    case 
            "sechs":
                        
            $wert5 5;
                        break;
                    case 
            "funf":
                        
            $wert5 4;
                        break;
                    case 
            "vier":
                        
            $wert5 3;
                        break;
                    case 
            "drei":
                        
            $wert5 2;
                        break;
                    case 
            "zwei":
                        
            $wert5 1;
                        break;
                }

            if(
            $wert4 $wert5) {
            $sql "DELETE FROM `drilling` WHERE `ID` = $i";
            mysql_query($sql$verb);
            $j++;
            }    
                
            }
            echo 
            $j;

            ?>
            @thomas
            die Rechnung stimmt leider so nicht, denn alle Möglichen Blätter im Poker (Texas Hold'em 5Karten) zusammen sind "nur" 2.598.960 und davon sind 54.912 Drillinge.
            Ich kann mir zwar leider nicht die mathematische Fähigkeit, das ich selbst drauf gekommen bin, auf die Fahne schreiben aber die Rechnungen alle so nachzuvollziehen das man es programmieren kann ist schon schwer genug.
            Hand (Poker) – Wikipedia

            Danke an alle Lieben Gruß PhilGB

            Kommentar

            Lädt...
            X