kostenloser Webspace werbefrei: lima-city


mysql-Abfrage

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s***h

    Hi,
    ich hab eine Frage:

    Ich habe da eine Tabelle namens "posts".
    In der sind verschiedene Posts z.B Gästebucheinträge.
    Die haben alle eine Spalte mit "thread_author", in der die ID des Users steht.
    Und ich habe eine Tabelle namens "user".
    In der steht jeweils der Username und die User-ID.

    Ich brauche nun eine Abfrage, die mir die X. Leute raussucht, die am meisten Posts geschrieben haben. Es soll Username und die Anzahl der Posts ausgegeben werden.

    Wie sieht da die mysql-Abfrage aus?


    Danke
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Also, wenn das nur eine Tabelle ist, dann kannst du das z.B. so machen:

    <?php
    $sql = "SELECT thread_author FROM posts";
    $result = mysql_query($sql);
    $arrCount = array();
    while ($row = mysql_fetch_object($result))
      $arrCount[$row->thread_author]++;
    asort($arrCount,SORT_NUMERIC);
    $x = 0;
    foreach($arrCount as $user => $posts) {
      echo $user.' => '.$posts.'<br />';
      if ($x == 5)
        break;
      $x++;
    }
    ?>


    So in der Art könntest du das angehen.
  4. Man könnte zwar auch ein bissl mit PhpMyAdmin rumspielen, aber bin mal nicht so...

    SELECT count(*) as anz, u.id, u.name FROM posts as p JOIN user as u ON u.id=p.fromuserid GROUP BY fromuserid ORDER BY anz DESC;

    Damit bekommst du eine Tabelle Anzahl, Userid, Username raus ;-)
    ...einfach dann halt die Einträge durch gehen und evtl mit "LIMIT 10" am Ende auf eine Anzahl begrenzen.

    Grüßle



    // Edit:
    @Sandrock: Ich glaube er hat eine Tabelle Posts wo ein User mehrere Zeilen haben kann. Deine Abfrage würde die Authoren nach der ID sortieren und die mit der höchsten ID ausgeben... bin mir nicht sicher aber sieht danach aus ;-)

    Beitrag geändert: 27.6.2007 20:22:20 von scout
  5. Autor dieses Themas

    s***h

    Vielen Dank soweit!
    Ich habe es jetzt mal nach der variante von scout gemacht.

    Aber er gibt mir einfach nichts aus. Die Ausgabe für nachfolgendes lautet: xy

    Wo ist der Fehler?

    <?php
    $result = mysql_query("SELECT count(*) as anz, u.user_id, u.user_name FROM ".$db_prefix."threads as p JOIN ".$db_prefix."users as u ON u.user_id=p.thread_author GROUP BY thread_author ORDER BY anz DESC");
    
    echo "y";
    
    while ($data = mysql_fetch_object($result)) {
    
    echo $data['user_name'].$data['anz']."<br>";
    
    }
    echo "x";
    ?>


    Beitrag geändert: 27.6.2007 20:48:40 von sesch
  6. Der Fehler ist dass deine fetch Anweisung nicht stimmt oder halt deine Variablen Ausgabe danach.

    Falls du mysql_fetch_object nimmst greift man danach mit $data->anz darauf zu.

    Falls du mysql_fetch_assoc nehmen möchtest greifst du mit $data['anz'] darauf zu ;-)


    Grüßle
  7. nun
    was bringt dir echo x, wenn du es einfach nur ausgibst und es nicht deklinierst. Schau dir doch mal oben an, was die anderen gemacht haben. Die haben alle am anfang gesagt $x=0 du dagegen hast nichts damit gemacht. Also könntest es auch gleich lassen ;)
  8. Autor dieses Themas

    s***h


    nun
    was bringt dir echo x, wenn du es einfach nur ausgibst und es nicht deklinierst. Schau dir doch mal oben an, was die anderen gemacht haben. Die haben alle am anfang gesagt $x=0 du dagegen hast nichts damit gemacht. Also könntest es auch gleich lassen ;)


    Das habe ich nur gemacht, um um sehen wo das Script "abbricht", also wo der Fehler ist ;)

    //edit:

    das Script geht immer noch nicht :(

    <?php
    
    $result = mysql_query("SELECT count(*) as anz, u.user_id, u.user_name FROM ".$db_prefix."threads as p JOIN ".$db_prefix."users as u ON u.user_id=p.thread_author GROUP BY thread_author ORDER BY anz DESC");
    
    echo "test<br>";
    
    while ($data = mysql_fetch_assoc($result)) {
    
    echo $data['user_name'].$data['anz']."<br>";
    
    }
    echo "endetest<br>";
    
    ?>


    Nochmal zur Überprüfung:
    Tabelle "threads" enthält die Spalte "thread_author".
    Tabelle "users" enthält die Spalten "user_id" und "user_name".

    Beitrag geändert: 27.6.2007 21:12:49 von sesch
  9. Naja hoffe dass das nicht deine ganze Datei ist...

    ...du solltest vor deinem mysql_query() natürlich noch eine Verbindung zur Datenbank aufbauen und eine Datenbank auswählen.

    also 1. mysql_connect(...);
    2. mysql_select_db(...);
    3. mysql_query(...);
    4. mysql_fetch_assoc(...);
    5. mysql_close(...);


    Grüßle ;-)
  10. Autor dieses Themas

    s***h


    Naja hoffe dass das nicht deine ganze Datei ist...

    ...du solltest vor deinem mysql_query() natürlich noch eine Verbindung zur Datenbank aufbauen und eine Datenbank auswählen.

    also 1. mysql_connect(...);
    2. mysql_select_db(...);
    3. mysql_query(...);
    4. mysql_fetch_assoc(...);
    5. mysql_close(...);


    Grüßle ;-)


    1.) und 2.) hab ich in der config.php und das funktioniert.
    3.) und 4.) ist in diesem Script
    und an 5.) kanns ja nicht liegen ;)
  11. naja aber deine Config hast du schon in diese Datei eingebunden oder?

    also ein: "include("config.php");

    Grüßle


    // Edit:
    und mach mal spaßeshalber das so:
    <?
    $sql = "SELECT....";
    
    echo "Abfrage: ".$sql;
    
    $result = mysql_query($sql);
    
    echo mysql_num_rows($result);
    
    ?>


    Beitrag geändert: 27.6.2007 21:32:23 von scout

    Beitrag geändert: 27.6.2007 21:34:22 von scout
  12. Autor dieses Themas

    s***h


    naja aber deine Config hast du schon in diese Datei eingebunden oder?

    also ein: "include("config.php");


    Grüßle


    Jop :biggrin:

    Der Fehler kann nur in diesem Scriptteil sein:

    <?php
    while ($data = mysql_fetch_assoc($result)) {
    
    echo $data['user_name'].$data['anz'].'<br>';
    
    } 
    ?>


    oder evtl im Query..
    Wenn ich "print $result" eingebe kommt "Resource id #42". Also heißt, dass das in $result schonmal was drin ist ;)


    //edit:
    Das ist die Ausgabe:
    SELECT count(*) as anz, u.user_id, u.user_name FROM flg_threads as p JOIN flg_users as u ON u.user_id=p.thread_author GROUP BY thread_author ORDER BY anz DESC

    Beitrag geändert: 27.6.2007 21:37:13 von sesch
  13. benutzt du Lima als DB und PHP Server oder einen anderen?

    mach mal spaßeshalber: var_dump($data);

    Beitrag geändert: 27.6.2007 21:49:43 von scout
  14. Bei mir hats mal mysql fehler ausgeworfen als ich COUNT(*) und weitere werte in einem rutsch abgefragt habe. habs dann mit mysql_num_rows gelöst.Das bei dir keine Fehlermeldung gibt kanns ja das nicht sein :mad:
  15. Autor dieses Themas

    s***h

    Problem wurde gelöst.

    Danke für die Hilfe!
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!