mysql-Abfrage
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anweisung
anzahl
ausgabe
beitrag
count
datei
fehler
kann
order
post
resource
result
schauen
scout
spalt
spalten
tabelle
user
username
vielen dank
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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 -
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 -
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 -
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 ;) -
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 -
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 -
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 ;) -
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 -
naja aber deine Config hast du schon in diese Datei eingebunden oder?
also ein: "include("config.php");
Grüßle
Jop
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 -
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 -
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
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage