hattrix: MySQL: Prüfen auf Doppeleinträge

Hallo,

folgendes:

Tabellenname: Punkte

id
id_v
tipp1
tipp1_plus
tipp2
tipp2_plus
gesamt_pkt

Sind alles Integers.
tipp1 und tipp2 sind die getippten Zahlen. tipp1_plus und tipp2_plus sind die erhaltenen Punkte.

Was soll passieren?

User haben bestimmte Tipps abgegeben. In meinem fall von 1 bis 30. Haben 2 User die gleiche Zahl bei Tipp1 und/oder bei Tipp2 abgegeben, dann erhalten sie 0 Punkte, statt die von Ihnen getippten Zahl.

Beispiel:

Otto 22 23
Bernd 28 23
Gunter 20 22
Daniel 19 30
Tim 22 8

Das heißt, dass Bernd die 23 Punkte nicht bekommt, weil Otto auch die 23 getippt hat.

Um genau diese Prüfung der Zahlen geht's jetzt. Ich finde kein Ansatz, dies über PHP/MySQL berechnen zu lassen.

  1. Moin,

    Das heißt, dass Bernd die 23 Punkte nicht bekommt, weil Otto auch die 23 getippt hat.

    Hmm, genau damit habe ich ein Verständnisproblem, also zu diesem Spiel.

    Wie sicherst Du diese Beziehung so dass es nicht genau umgekehrt wirken kann, also

    Das heißt, dass Otto die 23 Punkte nicht bekommt, weil Bernd auch die 23 getippt hat.

    Ist das Zeitabhängig oder so?

    --roro

    1. Keine Zeitabhängigkeit.

      Gibt es doppelte Tipps, erhalten beide 0 Punkte.

      1. Keine Zeitabhängigkeit.

        Gibt es doppelte Tipps, erhalten beide 0 Punkte.

        Ok.

        Tabellenname: Punkte

        id
        id_v
        tipp1
        tipp1_plus
        tipp2
        tipp2_plus
        gesamt_pkt

        In welcher Spalte steht denn der Name?

        --roro

        1. id_v ist eine Zahl, die dann mit der user-Tabelle verknüpft wird!

  2. Hello,

    Das heißt, dass Bernd die 23 Punkte nicht bekommt, weil Otto auch die 23 getippt hat.

    Aber Du willst doch sicher noch registrieren, was Bernd getippt hat, oder wird der Tipp als Ganzes abgelehnt?

    berechnen zu lassen.
    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Das habe ich ja schon. Es geht wirklich nur um die Prüfung, wer die gleichen Tipps abgibt.

      Beide gleichen Tipps => beide 0 Punkte!

      1. Hello,

        Aber Du willst doch sicher noch registrieren, was Bernd getippt hat, oder wird der Tipp als Ganzes abgelehnt?

        Das habe ich ja schon. Es geht wirklich nur um die Prüfung, wer die gleichen Tipps abgibt.

        Du möchtest also ein zusätzliches Statement für die Punkte aus Spalte 1 und noch ein weiteres für die Punkte aus Spalte 2?

        Oder möchtest Du möglichst alles mit einem Statement abwickeln?

        • Eintragung des Tipps
        • Nachschlagen in Spalte 1 und ermitteln der Punkte
        • Nachschlagen in Splate 2 und ermitteln der Punkte
        • eintragen der resultierenden Punkte in der Punkte-Spalte

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Punkt 1 und Punkt 4 habe ich bereits. Punkt 2 und 3 bekomme ich irgendwie nicht hin!

          1. Um es verständlicher zu machen ...
            Die Punkteübertragung von Tipp1 auf Tipp1_plus und Tipp2 auf Tipp2_plus, aber eben mit einer Prüfung auf Doppelung!

            Den Rest habe ich mir schon programmiert.

            1. Hello,

              Um es verständlicher zu machen ...
              Die Punkteübertragung von Tipp1 auf Tipp1_plus und Tipp2 auf Tipp2_plus, aber eben mit einer Prüfung auf Doppelung!

              Deine Reihenfolge musst Du entsprechend anpassen

              Tabelle sperren
                Nachschauen, ob es einen Datensatz mit der Punktzahl in der Spalte1 gibt
                Nachschauen, ob es einen Datensatz mit der Punktzahl in der Spalte2 gibt
                Die Ergebnisse auswerten und daraus den neuen Datensatz zusammenstellen und eintragen
              Tabelle freigeben.

              Das sind also zwei selects und ein Insert.

              Die beiden Selects könntest Du auch noch zusammenfassen mit einem "or" und dann in PHP auswerten

              Schöner wäre die Lösung mit einem Self-Join, aber ich weiß nicht, ob der bei Insert gestattet ist.
              Da müssten mal die DBMS-Spezialisten ran...

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau

              1. Hm, ich kann dir folgen.

                Einmal die Daten von Tipp1 und Tipp2 SELECTen, mit PHP ein script basteln und das ganze wieder UPDATEn (nicht INSERTen, weil Daten ja vorhanden sind)!

                Aber wie baue ich das Script? Darauf will ich hinaus. Werde bestimmt ein Array machen müssen, aber wie stelle ich dann die beziehung zu "id_v" (User-ID) her?

                1. Hello,

                  Du solltest Dir erst nochmal Klarheit verschaffen, über die Spielregeln.

                  Daraus kann man dann ein Datenmodell entwickeln und die Regeln für die Datenmanipulation /Punkteberechnung aufstellen

                  Deine Regeln sind nämlich noch ganz schön schwammig.
                  Und wenn man dann dann die Tabellen etwas geschickter aufbaut (Stichwort Normalisierung), dann löst sich das Problem vielleicht viel leichter...

                  Harzliche Grüße vom Berg
                  http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau

                  1. Spielregeln stehen fest. Will gern das umsetzen, was ich bereits hier geschrieben habe.

                    Wo sind die Regeln schwammig?

                    1. Hello,

                      Spielregeln stehen fest. Will gern das umsetzen, was ich bereits hier geschrieben habe.

                      Wo sind die Regeln schwammig?

                      Zitat:
                         Was soll passieren?

                      User haben bestimmte Tipps abgegeben. In meinem fall von 1 bis 30. Haben 2 User die gleiche
                         Zahl bei Tipp1 und/oder bei Tipp2 abgegeben, dann erhalten sie 0 Punkte, statt die von Ihnen
                         getippten Zahl.

                      Ent oder weder?

                      Harzliche Grüße vom Berg
                      http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau

                      1. Ent oder weder?

                        Was Ent oder weder?

                        1. Juhu, ich habe es jetzt doch hinbekommen! Freu!

                          Geht also doch mit einer Tabelle! *g*

                          Thread closed.