Finde Fehler in MySql Befehl nicht

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

  • Finde Fehler in MySql Befehl nicht

    Ich hoffe mir kann jmd helfen, ich schau da seid 2 Tagen drauf und seh den Fehler net, vermutlich ist es was ganz einfaches und ich bin schon betriebsblind

    Ich habe Truppendaten gespeichert, mit
    Anzahl (truppen_anzahl)
    Kennnummer PID (truppen_nummer)
    Einheitentyp (truppen_kennung)
    Armee (armee)

    Folgendes will ich erreichen, pro Armee sollte jeder Einheitentyp (truppen_kennung) nur einmal vorkommen, leider ist dies nicht der Fall und den Fehler muss ich ersteinmal beheben
    Dazu will ich also alle Armeen finden, in denen ein Einheitentyp mehrfach vorkommt, um diese Einheitentypen zu löschen, und einen neuen Eintrag erstellen, der die Summe dieser ganzen Einheiten enthält, quasi die Summe der Spalte truppen_anzahl bei denen armee und truppen_kennung gleich ist

    Ich dachte auch es funktioniert, aber manchmal kommen Zahlen raus, die ich nicht verstehe

    Zum verständnis der SQL Code und dann ne Ausgabe, ich würde mich sehr freuen, wenn mir jemand helfen kann

    Um diesen Befehl gehts

    PHP-Code:
    "SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz 
     FROM truppen t1, truppen t2 WHERE t1.armee=t2.armee 
     AND t1.truppen_nummer<>t2.truppen_nummer 
     AND t1.truppen_kennung=t2.truppen_kennung 
     GROUP BY armee, truppen_kennung" 
    PHP-Code:


    $query 
    "SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz 
     FROM truppen t1, truppen t2 WHERE t1.armee=t2.armee 
     AND t1.truppen_nummer<>t2.truppen_nummer 
     AND t1.truppen_kennung=t2.truppen_kennung 
     GROUP BY armee, truppen_kennung"
    ;
        
    $result mysql_query($query$link)
            or die(
    "Fehlersuche nicht erfolgreich");
        while(
    $row mysql_fetch_array($result)) {
            echo 
    "nummer: ".$row[truppen_nummer].
     
    " besitzer: ".$row[truppen_besitzer].
     
    " kennung: ".$row[truppen_kennung].
     
    " anzahl: ".$row[truppen_anzahl].
     
    " armee: ".$row[armee]."<b> anz: ".$row[anz]."</b><br>";

            
    $query1 "SELECT t1.* as anz 
     FROM truppen t1 
     WHERE t1.armee="
    .$row[armee];//." 
     
    AND t1.truppen_kennung=".$row[truppen_kennung];
            
    $result1 = mysql_query($query1$link)
                or die("
    Fehlersuche nicht erfolgreich");
            while(
    $row1 = mysql_fetch_array($result1)) {
                if (
    $row1[truppen_kennung] == $row[truppen_kennung]) {
                    echo "
    +++ nummer".$row1[truppen_nummer]." besitzer".$row1[truppen_besitzer].
     " 
    kennung: <b>".$row1[truppen_kennung].
     "
    </b><banzahl".$row1[truppen_anzahl].
     "
    </barmee".$row1[armee]."<br>";
                }
                else {
                    echo "
    +++ nummer".$row1[truppen_nummer]
     " 
    besitzer".$row1[truppen_besitzer].
     " 
    kennung".$row1[truppen_kennung].
     "
    <banzahl".$row1[truppen_anzahl].
     "
    </barmee".$row1[armee]."<br>";
                }
            }

    beispiel Ausgaben

    da klappts zb

    nummer: 220 besitzer: 5 kennung: 89 anzahl: 202 armee: 7 anz: 257
    +++ nummer: 220 besitzer: 5 kennung: 89 anzahl: 202 armee: 7
    +++ nummer: 24 besitzer: 5 kennung: 26 anzahl: 2 armee: 7
    +++ nummer: 35 besitzer: 5 kennung: 58 anzahl: 99 armee: 7
    +++ nummer: 42 besitzer: 5 kennung: 89 anzahl: 55 armee: 7
    +++ nummer: 103 besitzer: 5 kennung: 183 anzahl: 1 armee: 7
    +++ nummer: 185 besitzer: 5 kennung: 251 anzahl: 1 armee: 7

    da net

    nummer: 326 besitzer: 78 kennung: 341 anzahl: 90 armee: 62 anz: 294
    +++ nummer: 326 besitzer: 78 kennung: 341 anzahl: 90 armee: 62
    +++ nummer: 336 besitzer: 78 kennung: 343 anzahl: 1 armee: 62
    +++ nummer: 610 besitzer: 78 kennung: 488 anzahl: 36 armee: 62
    +++ nummer: 655 besitzer: 78 kennung: 488 anzahl: 1 armee: 62
    +++ nummer: 676 besitzer: 78 kennung: 488 anzahl: 3 armee: 62
    +++ nummer: 706 besitzer: 78 kennung: 488 anzahl: 1 armee: 62
    +++ nummer: 782 besitzer: 78 kennung: 341 anzahl: 2 armee: 62
    +++ nummer: 772 besitzer: 78 kennung: 341 anzahl: 2armee: 62
    +++ nummer: 795 besitzer: 78 kennung: 341 anzahl: 4 armee: 62

    der fehler beträgt den faktor 3, dass kann man ein paar mal beobachten, leider weiss ich net wie mir das helfen soltle
    Zuletzt geändert von sEeb; 27.10.2004, 17:04.
    verantwortlich für Elygor - Das kostenlose Browserspiel

  • #2
    1. Code umbrechen, dass man kein 22" Moni braucht, um zu lesen.
    2. was soll denn select t1.* as anz ... werden? (2. Abfrage)
    3. Versuch mal so: (1. Abfrage)
    Code:
    SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz FROM truppen t1 
            INNER JOIN truppen t2 
                ON t1.armee=t2.armee 
                AND t1.truppen_nummer<>t2.truppen_nummer 
                AND t1.truppen_kennung=t2.truppen_kennung 
                    GROUP BY armee, truppen_kennung
    
    // oder so
    
    SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz FROM truppen t1 
            INNER JOIN truppen t2 
                ON t1.armee=t2.armee 
                    WHERE t1.truppen_nummer<>t2.truppen_nummer 
                    AND t1.truppen_kennung=t2.truppen_kennung 
                        GROUP BY armee, truppen_kennung

    Kommentar


    • #3
      lustig dass wir zeitgleich on sind

      ich werde das mal ausprobieren, INNER JOIN sagt mir gar nix, werde mal nachschlagen was das macht

      danke schonmal
      verantwortlich für Elygor - Das kostenlose Browserspiel

      Kommentar


      • #4
        Original geschrieben von asp2php
        1. Code umbrechen, dass man kein 22" Moni braucht, um zu lesen.

        Kommentar


        • #5
          hab den code jetzt umgebrochen sry

          deine vorschläge haben leider nichts gebracht, aber ich weiss zumindest wie es zum fehler kommt

          vermutlich könnte man mit nem php konstrukt das problem umgehen, aber ne einfache sql anweisung wäre natürlich schöner

          ich vermute folgendes: wenn eine kennung zweimal auftritt, zählt er richtig, kommt eine kennung innerhalb einer armee jedoch 3mal 4mal etc oft vor, zählt er die datensätze mehrfach, quasi: eine kennung kommt 3 mal vor, das ergebnis vergrössert sich umd en faktor 2, eine kennung kommt 4 mal vor, das ergebnis vergrössert sich umd en faktor 3

          hat jemand ne idee, wie ich die mysql anweisung ändern muss, damit er diese datensätze eben nicht mehrfach zählt? ich dachte eigentlich das DISTINCT macht das, aber irgendwie wohl doch net
          verantwortlich für Elygor - Das kostenlose Browserspiel

          Kommentar


          • #6
            Re: Finde Fehler in MySql Befehl nicht

            Original geschrieben von sEeb
            Folgendes will ich erreichen, pro Armee sollte jeder Einheitentyp (truppen_kennung) nur einmal vorkommen, leider ist dies nicht der Fall und den Fehler muss ich ersteinmal beheben

            Wenn ich Dich richtig verstanden hab' bekommst Du
            die fehlerhaften Datensätze und die richtige Anzahl so:

            select
            Armee,
            count(distinct Einheitentyp) as AnzahlEinheit,
            sum(truppen_anzahl) as truppen_anzahl
            from truppen
            group by Armee
            having AnzahlEinheit>1

            Kommentar


            • #7
              vielen dank having war das zauberwort, ich hab versucht das im where unterzubrignen da kannte er das count aber net

              SELECT * , COUNT(*) AS counter, SUM(truppen_anzahl) AS anz
              FROM truppen
              GROUP BY armee, truppen_kennung
              HAVING counter>1
              ORDER BY counter DESC


              danke an alle
              verantwortlich für Elygor - Das kostenlose Browserspiel

              Kommentar

              Lädt...
              X