Ankündigung

Einklappen
Keine Ankündigung bisher.

Aus mehreren Tabellen (Foren) den Top User ermitteln

Einklappen

Neue Werbung 2019

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

  • Aus mehreren Tabellen (Foren) den Top User ermitteln

    Hallo,
    ich habe hier ein Open Source Foren Script welches schon ca. 6 Jahre im Einsatz ist.
    Wenn man in der Administration ein neues Forum erstellt dann wird in der Datenbank automatisch eine neue Tabelle bzw. Tabellen erzeugt.
    Jetzt zu meinem Problem.
    Ich möchte jetzt aus allen Foren Tabellen den User ermitteln der die meisten Posts hat. (evtl. auch die Top 10 User)
    Ich bin jetzt schon soweit das ich aus jedem Forum den User mit den meisten Posts erhalte. Jetzt möchte ich aber von den Top Usern
    der Foren den mit den meisten Posts haben. Ich hoffe ihr könnt mir helfen.
    Hier mal der Code den ich bisher habe:

    PHP-Code:
    $result=mysql_list_tables("diadiscussion");
    echo 
    "<u>Top Forums User</u>

    "
    ;
    for (
    $i=0;$i<dbnum_rows($result);$i++) {
        
    $table mysql_tablename($result,$i);
        if (
    ereg("([a-zA-Z_0-9]+)_type$",$table,$field)) {    
            
    $result4=dbquery("SELECT author, COUNT(author) AS anz FROM $field[1] GROUP BY author ORDER BY anz DESC Limit 1",$hd_discussion);

    while (
    $row mysql_fetch_row($result4)) {    
        
    echo 
    "[b]$row[1]$row[0][/b]
    "
    ;
    }

        }

    So sieht die Ausgabe in etwa aus:

    Forum 1
    36 hans

    Forum 2
    19 peter

    Forum 3
    7 tom

    Forum 4
    58 martin

    usw......

    Der Top User würde jetzt in diesem Beispiel martin mit 58 Posts sein.

  • #2
    Alle User mit der Anzahl an Einträgen in ein Array und denndie Anzahl der Einträge mit arsort sortieren und denn den 1. Eintrag des Array ausgeben, das ist denn der user mit den meißten Einträgen.
    Life is Life and life is hard

    Kommentar


    • #3
      Ok Ich lass mich hinreißen...

      PHP-Code:

      $result
      =mysql_list_tables("diadiscussion");
      echo 
      "<u>Top Forums User</u>

      "
      ;
      for (
      $i=0;$i<dbnum_rows($result);$i++) {
          
      $table mysql_tablename($result,$i);
          if (
      ereg("([a-zA-Z_0-9]+)_type$",$table,$field)) {    
              
      $result4=dbquery("SELECT author, COUNT(author) AS anz FROM $field[1] GROUP BY author ORDER BY anz DESC Limit 1",$hd_discussion);

      $user = Array(); // $user ist ein array

      while ($row mysql_fetch_row($result4)) {    //dein Code und ab hier meiner^^
          
      $user["$row[1]"] = $row[0]; //in $user wird der name als Indize und die Anzahl der Einträge als array Wert eingetragen
      }

          }
      }   

      arsort($user); // $user wird nach den Werten entgegengesetzt sortiert
      echo $user[0];  //Der 1. Eintrag des arrays (der mit den meißten Einträgen) wird ausgegeben 
      ungetestet. beim letzten Echo bin ich mir nicht sicher, ob das so machbar ist...
      Life is Life and life is hard

      Kommentar


      • #4
        Hallo scooter,
        erstmal danke das du dich hast hinreißen lassen. :wink:
        Zitat von scooter
        ungetestet. beim letzten Echo bin ich mir nicht sicher, ob das so machbar ist...
        Stimmt geht so wohl nicht.

        error_reporting(E_ALL);
        Sagt mir folgendes:

        Notice: Undefined offset: 0 in /var/httpd/mysql/security/admin/members_top_activities.php on line 118

        Kommentar


        • #5
          Naja.. musst mal sehen wie du denn den ersten eintrag aus dem array bekommst. vl ' um die 0 setzen^^
          Life is Life and life is hard

          Kommentar


          • #6
            Das habe ich schon probiert.
            Aber dann heisst es: Notice: Undefined index: 0 in....

            Ich probier mal noch was rum.

            Kommentar


            • #7
              Hab die Lösung^^ reset() und current() sollten dir helfen. Versuch mal damit was, sonst meld dich nochmal, ok?!

              EDIT: Danach hast du 2 Möglichkeiten:
              1. Du bekommst das dazugehörige Indize des Arrays auch ausgegeben (weiß grad nit wie...
              2. Durchsuchst nochmal die DB nach allen Usern mit dieser Anzahl an Einträgen und gibts diese denn aus.

              Musst wissen was du willst. Ich denke ich würde letzteres machen, denn das ist fehlertolleranter. Solltest du erste Möglichkeit wählen und du hast 2 user mit der selben anzahl einträgen könnte das script abschmieren. Nimmst du die 2. Möglichkeit, kann man auch den bisherigen Teil des Scripts vereinfachen
              Life is Life and life is hard

              Kommentar


              • #8
                Danke, ich werde mich damit mal versuchen.
                Wenn ich nicht weiter komme melde ich mich nochmal.

                Kommentar


                • #9
                  Ich glaube so geht das nicht.

                  Wenn ich mir mit
                  PHP-Code:
                  echo "<pre>";
                  var_dump($user);
                  echo 
                  "</pre>"
                  innerhalb der while schleife
                  das array anzeigen lasse, erhalte folgende Ausgabe:
                  PHP-Code:
                  array(1) {
                    [
                  2]=>
                    
                  string(5"user1"
                  }

                  array(
                  1) {
                    [
                  29]=>
                    
                  string(5"user2"
                  }

                  array(
                  1) {
                    [
                  3]=>
                    
                  string(5"user3"
                  }

                  array(
                  1) {
                    [
                  5]=>
                    
                  string(5"user1"

                  Ausserhalb der Schleife dann:

                  array(0) {
                  }

                  Müsste das nicht so aussehen?
                  PHP-Code:
                  array(4) {
                    [
                  2]=>
                    
                  string(5"user1"
                    
                  [29]=>
                    
                  string(5"user2"
                    
                  [3]=>
                    
                  string(5"user3"
                    
                  [5]=>
                    
                  string(5"user1"

                  Dann kann ja bei:
                  echo $user[0];
                  nur eine Fehlermeldung kommen da nichts vorhanden ist.

                  Kommentar


                  • #10
                    Kann es sein das die ganzen arrays mit array_merge erstmal zu einem array
                    zusammengefasst werden muss

                    Kommentar

                    Lädt...
                    X