probleme mit count()

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

  • probleme mit count()

    hallo,

    habe ein problem mit der count funktion.

    meine tabelle sieht wie folgt aus:


    linkid | teamid | playerid | teamtype | hiddenplayer
    1 | 3 | 1 | 6vs6 | 0
    2 | 4 | 1 | 6vs6 | 0

    mit der abfrage

    $TeamSQL = "SELECT teamid, COUNT(teamid) AS numteams FROM teamplayer WHERE playerid = ".$PlayersRow["playerid"]." AND teamtype != '1PL' GROUP BY teamid";
    $TeamRes = sql_query($TeamSQL);
    $TeamRow = sql_fetch_array($TeamRes);
    $NumTeams = $TeamRow["numteams"];

    if ($NumTeams == '') {
    $NumTeams = "0";
    }

    möchte ich die anzahl der datensätze wissen, bei denen die playerid z.b. 1 ist und teamtype nicht 1PL. count sollte also 2 zurückgeben. tut es aber nicht, egal in wievielen teams ein spieler ist, es wird mit $NumTeams immer nur 1 zurückgegeben.

    weiter unten möchte ich in verschiednen farben anzeigen ob ein spieler in mehreren teams eingetragen ist.

    <td align="center">
    <?
    switch ($NumTeams) {
    case 0:
    echo "<font color=\"#90EE90\"><strong>$NumTeams</strong></font>";
    break;
    case 1:
    echo "$NumTeams";
    break;
    default:
    echo "<font color=\"#FF0000\"><strong>$NumTeams</strong></font>";
    break;
    }
    ?>
    </td>

    leider wird hier nur 0 oder 1 angezeigt. wie bereits erwähnt werden spieler, die in mehrern teams sind nicht angezeigt.

    für irgend einen lösungsvorschlag währe ich sehr dankbar.

    heavy
    Heavy

  • #2
    Re: probleme mit count()

    probiere mal
    Code:
    SELECT COUNT(teamid) AS numteams FROM teamplayer WHERE playerid = ".$PlayersRow["playerid"]." AND teamtype != '1PL' GROUP BY teamid
    Und vor allem: Woher kommt $PlayersRow["playerid"] ?

    Kommentar


    • #3
      hallo,
      hab deinen vorschlag mal eingefügt. leider ist das ergebniss immer noch das gleiche. es wird weiterhin anstatt 2 nur 1 oder 0 ausgegeben.

      hier mal den kompletten code

      Code:
      $PlayersSQL = "SELECT * FROM player ORDER BY username";
      $PlayersRes = sql_query($PlayersSQL);
      
      ?>
      <table style="width:100%">
      <tr>
          <th>AAO-Playername</th>
          <th>Name</th>
          <th>Observer</th>
          <th>Clanleader</th>
          <th>Check</th>
          <th>Teams</th>
          <th>Tourneys</th>
           <th>Admin</th>
           
      </tr>
      <?
      while ($PlayersRow = sql_fetch_array($PlayersRes)) {
      
          $TeamSQL = "SELECT COUNT(teamid) AS numteams FROM teamplayer WHERE playerid = ".$PlayersRow["playerid"]." AND teamtype != '1PL' GROUP BY teamid";
          $TeamRes = sql_query($TeamSQL);
          $TeamRow = sql_fetch_array($TeamRes);
          $NumTeams = $TeamRow["numteams"];
          
          if ($NumTeams == '') {
              $NumTeams = "0";
          }
      
          $TourneySQL = "SELECT * FROM (((tournamentplayer INNER JOIN teamplayer ON tournamentplayer.participantID = teamplayer.teamid) INNER JOIN player ON player.playerid = teamplayer.playerid) INNER JOIN tournament ON tournament.tourneyid = tournamentplayer.tourneyid) INNER JOIN game ON tournament.gameid = game.gameid INNER JOIN team ON teamplayer.teamid=team.teamid WHERE player.playerid = ".$PlayersRow["playerid"];
          $TourneyRes = sql_query($TourneySQL);
          $NumTourneys = sql_num_rows($TourneyRes);
          
          ?>
          <tr class="list">
          <td><a href="adminplayer.php?Admin=<?=$PlayersRow["playerid"]?>"><?=$PlayersRow["username"]?></a></td>
          <td><?=$PlayersRow["firstname"]." ".$PlayersRow["surname"]?></td>
          <td align="center">
          <?
              if ($PlayersRow["beobachter"] == 1) {
                  echo "<font color=\"#d09c03\"><strong>YES</strong></font>";
              }
              ?>
          </td>
          <td align="center">
          <?
              if ($PlayersRow["clanleader"] == 1) {
                  echo "<font color=\"#90EE90\"><strong>YES</strong></font>";
              }
              ?>
          </td>
          <td align="center">
          <?
              if ($PlayersRow["leaderfromadmin"] == 1 AND $PlayersRow["clanleader"] == 1) {
                  echo "<font color=\"#90EE90\"><strong>•••</strong></font>";
              }
              if ($PlayersRow["leaderfromadmin"] == 0 AND $PlayersRow["clanleader"] == 1) {
                  echo "<font color=\"#FF0000\"><strong>•••</strong></font>";
              }
              ?>
          </td>
          <td align="center">
      <?
          switch ($NumTeams) {
             case 0:
                 echo "<font color=\"#90EE90\"><strong>$NumTeams</strong></font>";
                break;
             case 1:
                 echo "$NumTeams";
                 break;
             default:
                 echo "<font color=\"#FF0000\"><strong>$NumTeams</strong></font>";
                 break;
            }
      ?>
           </td>
           <td align="center"><?=$NumTourneys?></td>
          <td><a href="adminplayer.php?Admin=<?=$PlayersRow["playerid"]?>">Admin</a></td>
          </tr>
          <?
      }
      echo "</table>";
      Heavy

      Kommentar


      • #4
        Das

        Code:
        if ($NumTeams == '') {
                $NumTeams = "0";
            }
        würde ich so probieren:

        Code:
        if ($NumTeams = 0) {
                $NumTeams = "0";
            }
        oder so:

        Code:
        if ($NumTeams == "0") {
                $NumTeams = "0";
            }
        $NumTeams kann ja nie leer sein. Selbst, wenn er keinen Datensatz findet, wird er 0 in die Variable schreiben (ist jedenfalls meine Annahme).
        Zuletzt geändert von ; 10.02.2004, 13:25.

        Kommentar


        • #5
          hy, auch mal so ein problem, vielleicht kann dir mein alter thread hierzu helfen

          http://www.it-development.de/forum/s...threadid=27380

          gruss
          jochen

          Kommentar


          • #6
            hallo jochenj,

            dein thread hat mir nicht wirklich weitergeholfen, da mir die count funktion
            bei abfrage der gesamten tabelle den richtigen wert ausgibt. lediglich die
            einschränkung der abfrage auf playerid und teamtype verursacht dass
            lediglich 1 ausgegeben wird.

            hallo Innuendo,

            ob ich '' , 0 oder "0" eingebe macht keinen unterschied. lediglich, wenn ich
            die ganze zeile weglasse wird im ergebniss keine 0 sondern ein leeres feld angezeigt.

            die count funktion gibt mir anstatt einem ergebniss, das 2 lauten sollte,
            zwei zeilen mit jeweils 1 aus. da das ganze in einer schleife läuft steht in
            jedem angezeigten datensatz lediglich 0 oder 1, selbst wenn der player in
            10 teams ist.

            gibt es eine andere funktion, mit der das problem zu lösen ist?

            HeavyArmor
            Heavy

            Kommentar


            • #7
              Der Weg mit COUNT ist schon richtig.

              Woher beziehst Du denn in der Zeile
              Code:
              $TeamSQL = "SELECT COUNT(teamid) AS numteams FROM teamplayer WHERE playerid = ".$PlayersRow["playerid"]." AND teamtype != '1PL' GROUP BY teamid";
              $PlayersRow["playerid"] ?

              Das sieht für mich nämlich aus, als wenn Du vorher noch ein SELECT machst und dort im Array $PlayersRow[] die entsprechende playerid sicherst. Allerdings sehe ich diesen SELECT im von Dir geposteten Code nicht.

              Kommentar


              • #8
                gleich oben in der ersten zeile

                Code:
                $PlayersSQL = "SELECT * FROM player ORDER BY username";
                $PlayersRes = sql_query($PlayersSQL);
                aber selbst wenn ich anstatt $PlayersRow["playerid"] 1 eingebe erhalte ich das gleiche ergebnis
                Zuletzt geändert von Heavy; 10.02.2004, 18:23.
                Heavy

                Kommentar


                • #9
                  Da steht was von PlayersRES, aber nichts von PlayersROW.

                  Da fehlt ja ein $PlayersRow = mysql_fetch_array($PlayersRes)

                  Versuche mal bei
                  Code:
                      $TeamRes = sql_query($TeamSQL);
                      $TeamRow = sql_fetch_array($TeamRes);
                      $NumTeams = $TeamRow["numteams"];
                  das
                  Code:
                      $TeamRes = sql_query($TeamSQL);
                      $TeamRow = sql_fetch_row($TeamRes);
                      $NumTeams = $TeamRow["numteams"];
                  Und bei
                  Code:
                  if($NumTeams == '') { ...
                  das
                  Code:
                  if($NumTeams == "0") { ...

                  Kommentar


                  • #10
                    Du kannst alles in eine Query packen.
                    etwa so:

                    SELECT p.teamid,count(tp.teamid)
                    FROM player p LEFT JOIN teamplayer tp ON p.playerid = tp.playerid
                    WHERE tp.teamtype != '1PL'
                    GROUP BY p.teamid
                    ORDER BY p.teamid
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #11
                      einige zeilen tiefer steht in der schleife

                      while ($PlayersRow = sql_fetch_array($PlayersRes)) {

                      somit kann ich doch die playerid auslesen. das problem scheint aber auch
                      nicht die playerid zu sein.

                      wenn ich
                      Code:
                      $TeamRes = sql_query($TeamSQL);
                          $TeamRow = sql_fetch_row($TeamRes);
                          $NumTeams = $TeamRow["numteams"];
                      eingebe bokomme ich diese fehlermeldung

                      Fatal error: Call to undefined function: sql_fetch_row() in \admin\player.php on line 79

                      deine query mellopie bin ich noch am testen. kann dauern, da ich nicht wirklich
                      verstehe, was du mit p. und tp. meinst. hab erst vor zwei wochen mit php
                      angefangen.
                      Heavy

                      Kommentar


                      • #12
                        die Funktion heisst ja auch [color=red]MY[/COLOR]sql_fetch_query!
                        Für Rechtschreibfehler übernehme ich keine Haftung!

                        Kommentar


                        • #13
                          ich hab eine funktion, die das MY davorsetzt

                          Code:
                          function sql_fetch_array($dbResult) {
                              return mysql_fetch_array($dbResult);
                          }
                          Heavy

                          Kommentar


                          • #14
                            p. und tp. sind Kurznamen Deiner Tabellen.

                            SELECT p.spalte, tp.spalte FROM player p LEFT JOIN teampl tp
                            ist das gleiche wie

                            SELECT player.spalte, teampl.spalte ....

                            Um jetzt nicht immer die Tabellennamen zu schreiben, verwendet Mello einfach die Kurznamen.

                            Kommentar


                            • #15
                              Original geschrieben von Heavy
                              ich hab eine funktion, die das MY davorsetzt

                              Code:
                              function sql_fetch_array($dbResult) {
                                  return mysql_fetch_array($dbResult);
                              }
                              Wo wird die definierT?
                              Für Rechtschreibfehler übernehme ich keine Haftung!

                              Kommentar

                              Lädt...
                              X