Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankzeilen zählen

Einklappen

Neue Werbung 2019

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

  • Datenbankzeilen zählen

    Ich habe folgenden Code erstellt um Datenbankzeilen zu zählen:

    PHP-Code:
    <?

    $nr = "23";

    $host = "xxx";
    $user = "xxx";
    $pwd = "xxx";
    $datenbank = "xxx";

    $connection = mysql_connect ($host,$user,$pwd) OR DIE (mysql_error());
    mysql_select_db ($datenbank, $connection) OR DIE (mysql_error());

    $anzahl = mysql_query ("SELECT COUNT(status) FROM raetsel$nr") OR DIE (mysql_error());
    $zahl=mysql_fetch_row($anzahl);
    $gesamt = $zahl[0];

    $anzahl = mysql_query ("SELECT COUNT(status) FROM raetsel$nr WHERE status = '0'") OR DIE (mysql_error());
    $zahl=mysql_fetch_row($anzahl);
    $unueberprueft = $zahl[0];

    $anzahl = mysql_query ("SELECT COUNT(status) FROM raetsel$nr WHERE status = '1'") OR DIE (mysql_error());
    $zahl=mysql_fetch_row($anzahl);
    $richtig = $zahl[0];

    $anzahl = mysql_query ("SELECT COUNT(status) FROM raetsel$nr WHERE status = '2'") OR DIE (mysql_error());
    $zahl=mysql_fetch_row($anzahl);
    $falsch = $zahl[0];

    $anzahl = mysql_query ("SELECT COUNT(status) FROM raetsel$nr WHERE status = '3'") OR DIE (mysql_error());
    $zahl=mysql_fetch_row($anzahl);
    $ungueltig = $zahl[0];
      
    ?>
    Das Script funktioniert zwar, aber meine Frage ist:
    Kann man das eigentlich irgendwie vereinfachen?
    Bye René


  • #2
    Schau Dir mal an, was für Datensätze
    SELECT status,Count(status) FROM raetsel$nr GROUP BY status
    liefert.


    Du hast für jedes raetsel$nr eine eigene Tabelle? Das scheint mir auf Anhieb nicht richtig/elegant zu sein. Du hälst doch in all diesen Tabellen die gleichen Daten und führst die gleichen Operationen aus. Die Tabellen beschrieben gleiche "Objekte". => raetsel$nr wird ein Feld einer einzigen Tabelle raetsel

    Kommentar


    • #3
      Na ja, es ist so, dass für jedes Rätsel eine neue Tabelle angelegt wird, wo die Daten des Users (also seine Lösung zum aktuellen Rätsel, sein Name, usw.) in einer Zeile gespeichert werden.

      Wenn man dann die Seite www. xxx .de/?nr=21 aufruft wird die Tabelle raetsel21 aufgerufen und die Daten gezählt, die jeweils den Status 0,1,2 und 3 haben.
      Oder hab ich das falsch verstanden?

      Eigentlich wollte ich fragen, ob man diesen Code so "ausführlich" angeben muss um die jeweiligen Zeilen zu zählen.

      Kommentar


      • #4
        Zitat von r-ene
        Eigentlich wollte ich fragen, ob man diesen Code so "ausführlich" angeben muss um die jeweiligen Zeilen zu zählen.
        Zitat von Bruchpilot
        Schau Dir mal an, was für Datensätze
        SELECT status,Count(status) FROM raetsel$nr GROUP BY status
        liefert.
        Das soll ein "Nein, man muss es nicht so kompliziert schreiben" implizieren.

        Zitat von r-ene
        Na ja, es ist so, dass für jedes Rätsel eine neue Tabelle angelegt wird, wo die Daten des Users (also seine Lösung zum aktuellen Rätsel, sein Name, usw.) in einer Zeile gespeichert werden.
        So sind rdbms einfach nicht gedacht.
        Zitat von Bruchpilot
        Du hast für jedes raetsel$nr eine eigene Tabelle? Das scheint mir auf Anhieb nicht richtig/elegant zu sein. Du hälst doch in all diesen Tabellen die gleichen Daten und führst die gleichen Operationen aus. Die Tabellen beschrieben gleiche "Objekte". => raetsel$nr wird ein Feld einer einzigen Tabelle raetsel

        Kommentar


        • #5
          Ok danke,
          und wie kann ich das dann ausgeben?
          Bei $myrow[0] geht das, aber $myrow[1]-$myrow[3] geht nicht.
          Und wieso sind rdbms nicht dazu gedacht? Soll ich dann komplett alle abgeschickten Lösungen und Daten in einer Tabelle speichern?
          Sorry, seid mir nicht böse, ich bin halt voll der Anfänger.

          Gruß René

          Kommentar


          • #6
            einfach mysql_num_rows() ?

            wär glaub ich schonmal einfacher..

            mfg
            Andi

            Kommentar


            • #7
              Erstmal solltest du Bruchpilots Rat beherzigen und eine Tabelle mit dem zusätzlichen feld raetselnr.

              Deine weitere Abfrage findest du dann unter dem Stichwort "pivotieren"

              Code:
              SELECT COUNT(status) AS gesamt,
                SUM(IF(status=0, 1, 0)) AS unueberprueft,
                SUM(IF(status=1, 1, 0)) AS richtig,
                SUM(IF(status=2, 1, 0)) AS falsch,
                SUM(IF(status=3, 1, 0)) AS ungueltig
              FROM raetsel
              WHERE raetselnr = 23

              Kommentar


              • #8
                Zitat von r-ene
                Und wieso sind rdbms nicht dazu gedacht? Soll ich dann komplett alle abgeschickten Lösungen und Daten in einer Tabelle speichern?
                Exakt. Du speicherst alle Lösungen in einer Tabelle und ordnest die Lösungen über eine zusätzliche Spalte raetselnr den unterschiedlichen Rätseln zu.

                Zitat von DER_Brain
                http://dev.mysql.com/doc/refman/4.1/en/timestamp-4-1.html
                Erst alle Datensätze ermitteln, um dann lediglich die Anzahl der Datensätze zu ermitteln, ist wesentlich unperformanter als die MySQL-Funktion COUNT() zu benutzen.

                Kommentar


                • #9
                  Ja danke!!!
                  Also nur das nötigste ermitteln ist damit gemeint, oder?

                  PHP-Code:
                  $anzahl mysql_query ("SELECT COUNT(status) AS gesamt, 
                    SUM(IF(status=0, 1, 0)) AS unueberprueft, 
                    SUM(IF(status=1, 1, 0)) AS richtig, 
                    SUM(IF(status=2, 1, 0)) AS falsch, 
                    SUM(IF(status=3, 1, 0)) AS ungueltig 
                  FROM raetsel23"
                  ) OR DIE (mysql_error());

                  $zahl=mysql_fetch_row($anzahl);

                  $gesamt $zahl[0];
                  $unueberprueft $zahl[1];
                  $richtig $zahl[2];
                  $falsch $zahl[3];
                  $ungueltig $zahl[4]; 
                  Sieht schon besser aus als mein Code am Anfang.
                  Ach ja, und die neue Spalte muss ich halt noch erstellen.
                  DANKE NOCHMAL!!!
                  Bye René

                  PS. Wieso eigentlich diese 1, 0 bei SUM(IF(status=3, 1, 0))

                  Kommentar


                  • #10
                    Zitat von r-ene
                    Also nur das nötigste ermitteln ist damit gemeint, oder?
                    Genau, somit werden sowohl der Web- als auch der Datenbankserver entlastet.

                    Zitat von r-ene
                    PS. Wieso eigentlich diese 1, 0 bei SUM(IF(status=3, 1, 0))
                    http://dev.mysql.com/doc/refman/5.0/...functions.html

                    Kommentar


                    • #11
                      man lernt nie aus..

                      danke..


                      mfg
                      Andi

                      Kommentar

                      Lädt...
                      X