Count Problem

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

  • Count Problem

    So,

    jetzt wirds kompliziert:

    Ich habe das Problem, dass ich eine Tabelle hab, in der ein Fremdschlüssel integriert ist, diese Tabelle wird mit

    "SELECT titel.titel, Count(*) , daub.titel_id FROM daub JOIN titel WHERE
    titel.id = daub.titel_id GROUP BY titel_id"

    durchsucht, soweit kein Problem, ich bekomme im MyAdmin Abfragebereich ne schöne Tabelle geliefert, die auch die richtigen Ergebnisse liefert.
    Jetzt will ich die entsprechenden Anzahlen der Ergebnisse übernehmen und über PHP ausgeben, und dann geht nichts!

    Ausgabe:
    while ($record=mysql_fetch_assoc($result)) {
    //Datensatz steht in $record

    // Platzhalter in den Spalten mit Werten füllen
    $tpl->AssignLocal("main.tabelle.zeile","TITEL", $record["titel"]);
    $tpl->AssignLocal("main.tabelle.zeile","ID", $record["id"]);
    while ($record2=mysql_fetch_array($result2["Count(*)"])) {
    $tpl->AssignLocal("main.tabelle.zeile","ANZAHL", $record2);
    }

    Wo ist der Fehler?
    Zuletzt geändert von Sardine; 23.04.2004, 12:10.
    Wer brauch schon ne Signatur?

  • #2
    Count(*) as zahl


    dann mit $row['zahl'] ansprechen,

    wobei ich glaube ein extra query mit count wäre schneller.
    mfg
    marc75

    <Platz für anderes>

    Kommentar


    • #3
      Wenn Du

      PHP-Code:
      $record=mysql_fetch_assoc($result)) 
      verwendest, solltest Du darauf achten, daß Deinen aus der DB ausgelesenen Werten auch eindeutige NAmen zugeordnet werden.

      Für Count(*) ist das nicht der Fall. Weise dem Ergebnis mit "AS" einen Namen zu:

      PHP-Code:
      SELECT titel.titelCount(*)  AS mycountdaub.titel_id FROM daub JOIN titel WHERE 
      titel
      .id daub.titel_id GROUP BY titel_id 
      In $record['mycount'] sollte dann der korrekte Wert stehen.
      Happiness is an empty error log

      Kommentar


      • #4
        Nun, die Ausgabe ist nicht das Problem, nur die richtigen Werte den entsprechenden Titeln zuzuordnen passt nicht.

        Der Link unten gibt evtl. etwas aufschluss um was es geht. Es sind dort 3 mal der Titel Dr. vergeben und die anderen Titel jeweils 1 mal, das sollte in der Tabelle angezeigt werden. und zur Zeit wird immer das Ergebniss des Titels Dr. angezeigt.

        Zuletzt geändert von Sardine; 23.04.2004, 12:10.
        Wer brauch schon ne Signatur?

        Kommentar


        • #5
          vielleicht klärst du uns erst mal auf (etwas mehr quelltext), welche abfrage bei dir hinter $result und welche hinter $result2 steckt, und vor allem, warum du die auswertung von $result2 in die schleife über $result verschachteltst ...
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            PHP-Code:
            $sql "select titel, id
                    from titel
                    order by id "
            ;

            $result=mysql_query($sql)
                or 
            fatal_error("$sql \n".mysql_error());
            $record=mysql_fetch_assoc($result);
            $out .= "Zustand = $zustand \n";

            $sql2"SELECT titel.titel, Count(*) As mycount , daub.titel_id 
                    FROM daub JOIN titel 
                    WHERE titel.id = daub.titel_id 
                    GROUP BY titel_id"
            ;

            $result2=mysql_query($sql2)
                or 
            fatal_error("$sql \n".mysql_error());

            $record2=mysql_fetch_array($result2);

                
            //zustandabhängie Aktionen

            // Header erzeugen
            insert_header1("Liste aller Titel");
            // Body
            $tpl = new QuickTemplate("titelanzeige.tpl","main");

            if(
            mysql_num_rows($result)) {

                
            $tdclass="tab1_8"//CSS-STil der 1. Tabellzeile
                
            while ($record=mysql_fetch_assoc($result)) {
                    
            //Datensatz steht in $record
                    
                    // Platzhalter in den Spalten mit Werten füllen            
                    
            $tpl->AssignLocal("main.tabelle.zeile","TITEL"$record["titel"]);
                    
            $tpl->AssignLocal("main.tabelle.zeile","ID"$record["id"]);
                    
            $tpl->AssignLocal("main.tabelle.zeile","ANZAHL"$record2["mycount"]);
                    
                    
            //Zeilenblock ausgeben
                    
            $tpl->parse("main.tabelle.zeile");
                    
            //CSS-Stil der Zeile zwischen tab1_8 und tab2_8 schalten
                    
            $tdclass=($tdclass == "tab1_8")?"tab2_8":"tab1_8";    
                } 

            So, das ist mal der wichtige Quelltext!

            EDIT:
            bitte nutze zukünftig [php]-tags, um PHP-code zu formatieren - [color=orange] erhöht die lesbarkeit kein bisschen.
            Zuletzt geändert von Sardine; 23.04.2004, 12:10.
            Wer brauch schon ne Signatur?

            Kommentar


            • #7
              PHP-Code:
              $record2=mysql_fetch_array($result2); 
              hier liest du den ersten datensatz aus der ergebnismenge deiner zweiten abfrage aus.

              PHP-Code:
              $tpl->AssignLocal("main.tabelle.zeile","ANZAHL"$record2["mycount"]); 
              und hier gibst du diesen ersten wert dann innerhalb deiner while-schleife immer wieder aus.

              ich sehe dich aber nirgends die weiteren datensätze aus der ergebnismenge deiner zweiten query abfragen - also wieso wundert es dich dann noch, dass du immer nur den wert aus dem ersten datensatz angezeigt bekommst?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Aber wie binde ich diese weiteren Abfragen so ein, dass die Template ausgabe das richtig macht, das muss doch innerhalb der zweiten Schleife ablaufen!
                Zuletzt geändert von Sardine; 23.04.2004, 12:11.
                Wer brauch schon ne Signatur?

                Kommentar


                • #9
                  Original geschrieben von Sardine
                  Aber wie binde ich diese weiteren Abfragen so ein, dass die Template ausgabe das richtig macht, das muss doch innerhalb der zweiten Schleife ablaufen!
                  liefert dir denn deine zweite abfrage genau so viele datensätze wie deine erste, und auch noch jeweils "passend" zum datensatz aus der ersten? (wenn nicht, macht es ja eh kaum sinn ...)

                  wenn ja, dann hole dir zu beginn deiner while-schleife auch aus der zweiten ergebnismenge den nächsten datensatz.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Original geschrieben von Sardine
                    Aber wie binde ich diese weiteren Abfragen so ein, dass die Template ausgabe das richtig macht, das muss doch innerhalb der zweiten Schleife ablaufen!
                    indem du $sql vergisst und titel.id in $sql2 in select auf nimmst und "order
                    by titel.id" noch hinzu packst. Somit hast du nur eine Abfrage für die
                    Ausgabe. Ist besser und schneller. Ich verstehe nicht warum du 2 machst.
                    Ausserdem "if(mysql_num_rows($result))" kannst du auch rausschmeissen,
                    while überprüft ja schon, ob was da ist.

                    Kommentar


                    • #11
                      PHP-Code:
                      require("../../lib/init.inc.php");
                      checkinput();
                      //Datensatz löschen
                      if ($delete){
                          
                      $out .= "Löschen angesagt \n";
                          
                      $sqla "SELECT  count( * ) AS mycount    FROM daub 
                                       where titel_id='
                      $delete'";
                          
                      $recorda =mysql_query($sqla)
                              or 
                      fatal_error(mysql_error());
                          if ( 
                      mysql_result($recorda,0,'mycount') == ) {
                              
                      $out .= "kommt nicht vor \n";
                              
                      // kommt nicht vor, darf gelöscht werden
                              
                      $sqld="delete from titel_daub where id='{$_GET["delete"]}'";
                              
                      mysql_query($sqld)
                                  or 
                      fatal_error(mysql_error());
                          } else {
                              
                      $out .= "kommt vor \n";
                              
                      $error 1;
                          }
                      }
                      $sql "SELECT titel_daub.titel, 
                              IF (daub.titel_id IS NULL , ' 0', count( * ) ) AS mycount, daub.titel_id, titel_daub.id
                              FROM titel_daub
                              LEFT JOIN daub ON titel_daub.id = daub.titel_id
                              GROUP BY titel_daub.id
                              ORDER BY titel_daub.id"
                      ;

                      $result=mysql_query($sql)
                          or 
                      fatal_error("$sql \n".mysql_error());
                          

                      $out .= "Zustand = $zustand \n";


                      // Header erzeugen
                      insert_header1("Liste aller Titel");
                      // Body
                      $tpl = new QuickTemplate("titelanzeige.tpl","main");

                      if(
                      mysql_num_rows($result)) {

                          
                      $tdclass="tab1_8"//CSS-STil der 1. Tabellzeile
                          
                      while ($record=mysql_fetch_assoc($result)){
                              
                      //Datensatz steht in $record
                              // Platzhalter in den Spalten mit Werten füllen            
                              
                      $tpl->AssignLocal("main.tabelle.zeile","TITEL"$record["titel"]);
                              
                      $tpl->AssignLocal("main.tabelle.zeile","ID"$record["id"]);
                              
                      $tpl->AssignLocal("main.tabelle.zeile","ANZAHL"$record["mycount"]);
                              
                      $tpl->AssignLocal("main.tabelle.zeile","TDCLASS"$tdclass);

                              
                      //Zeilenblock ausgeben
                              
                      $tpl->parse("main.tabelle.zeile");

                              
                      //CSS-Stil der Zeile zwischen tab1_8 und tab2_8 schalten
                              
                      $tdclass=($tdclass == "tab1_8")?"tab2_8":"tab1_8";
                          }
                          
                      // Tabellenblock ausgeben
                          
                      $tpl->parse("main.tabelle");                

                      } else {
                          
                      // Leere Tabelle
                          
                      $tpl->AssignLocal("main.error","ERR_MSG""Keine Titeleinträge gefunden");
                          
                      $tpl->parse("main.error");

                      // andere Fehler anzeigen
                      if ($error) {
                          
                      $out .= "Fehlerblock \n";
                          
                      $tpl->AssignLocal("main.error","ERR_MSG""Löschen nicht erlaubt");
                          
                      $tpl->parse("main.error");
                      }
                      $tpl->parse("main");
                      $tpl->quickPrint("main");

                              
                      debug_print();
                      ?> 
                      Der entgültige Code!


                      So, habs doch hinbekommen, hab die ganze Abfrage in eine gepackt wie oben vorgeschlagen und noch ein paar Fehlerabfragen eingabaut.

                      Danke mal an alle.

                      EDIT:
                      ich hatte dich bereits gebeten, [php]-tags zu verwenden statt [color], um die lesbarkeit zu erhöhen ...
                      wahsaga

                      Zuletzt geändert von Sardine; 23.04.2004, 12:11.
                      Wer brauch schon ne Signatur?

                      Kommentar

                      Lädt...
                      X