Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
SQL-Abfrage: die meisten user [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
SQL-Abfrage: die meisten user


 
Kangarooo
12-02-2010, 09:25 
 
Hallo!
Irgendwie find eich gerade nicht den richtigen Anfang!
Und zwar habe ich eine Datenbanktabelle "news". jeder user kann news veröffentlichen. Es sind so ca. 80 user. Jetzt will ich die top 5 user anzeigen lassen, mit den meisten angelegten news!
Meine bisherige Abfrage sieht so aus:
$top="SELECT users FROM news ORDER BY users";
Irgendwie weiß ich nicht wie ich das die Abfrage machen soll. Hat da jemand ne Idee? Danke!

*join*

Habs hinbekommen, thread kann gelöscht werden!

 
AmicaNoctis
12-02-2010, 11:04 
 
Der Thread wird nicht gelöscht. Poste lieber deine Lösung, falls mal ein anderer Anfänger dasselbe Problem hat.

 
Kangarooo
12-02-2010, 11:09 
 
Naja, ich hab als erstes alle user ausgelsen aus der DB, und danach jeweils dei news, welche der aktuelle ausgelesene user angelegt hat.
2 while schleifne ineinadner verschachtelt!

 
AmicaNoctis
12-02-2010, 11:29 
 
Naja, das ist aber keine Lösung, sowas hätte man trotzdem besser über MySQL gemacht. Wenn es nämlich irgendwann mal tausende Benutzer mit jeweils tausenden Beiträgen gibt, bekommst du ein Problem beim Einlesen der Millionen von Datensätzen, nur um daraus die Top 5 zu ermitteln.

Allerdings weiß ich nicht, wie deine DB ungefähr aussieht, weswegen ich nichts genaueres sagen kann.

 
rossixx
12-02-2010, 19:43 
 
genau !!!

hier mal nur eine möglichkeit mit SQL zu erfragen



SELECT user, count( id )
FROM `news_tb`
GROUP BY user
LIMIT 0 , 10


das wäre ein beispiel für eine einfahce tabelle

das geht natürlich auch mit mehreren

z.b. user liegt in user_tb und ist in der news_tb nur mit seiner user_id abgelegt.




SELECT user_tb.user, count( news_tb.id )
FROM news_tb, user_tb
WHERE user_tb.id = news_tb.user_id
GROUP BY user_tb.user
LIMIT 0 , 10



oder so ähnlich, soll ja auch nur zum denken anregen.

 
AmicaNoctis
12-02-2010, 19:47 
 
@rossixx: Bitte Anfängern keine Theta-Style-Joins vorschlagen, nachher machen die das dann noch so ;)

Das zweite Beispiel von rossixx sollte so aussehen:

SELECT user_tb.user, count( news_tb.id )
FROM news_tb
JOIN user_tb on user_tb.id = news_tb.user_id
GROUP BY user_tb.user
LIMIT 0 , 10


Gruß,

Amica

 
rossixx
13-02-2010, 23:33 
 
ich wollte nur ein tippp geben, aber von mir aus darf er gern deinen vorschlag übernehmen, solang er versteht was wofür steht.

 
Kangarooo
15-02-2010, 09:05 
 
Sehr gut, habe es verstadnen :-) DANKE!!


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:30 Uhr.