Morfois Geschrieben 25. Februar 2006 Geschrieben 25. Februar 2006 Ich habe folgenden code: function sort_parks($current_year) { $sql = "SELECT userid, nickname, age, wohnort, name FROM cbook_users WHERE online='1';"; $result = mysql_query($sql) OR die(mysql_error()); if(mysql_num_rows($result)) { $i = "1"; while($row = mysql_fetch_assoc($result)) { $sql_p = "SELECT parkid FROM cbook_besuch WHERE jahr='".addslashes(htmlspecialchars($current_year))."' AND userid='".addslashes(htmlspecialchars($row['userid']))."' GROUP BY parkid;"; $result_p = mysql_query($sql_p) OR die(mysql_error()); if(mysql_num_rows($result_p)) { $daten_p = array(); while($row_p = mysql_fetch_assoc($result_p)) { $daten_p[] = $row_p['parkid']; } $parks = count($daten_p); } else { $parks = "0"; } if($parks > 0) { echo('<tr>'); echo("<td width=\"25\">".$i.".</td>"); echo("<td width=\"130\"><a href=\"./page1.php?userid=".$_GET['userid']."&showid=".$row['userid']."&jahr=".$current_year."&page=1\">"); if(isset($_SESSION['ID']) && $_SESSION['ID'] == $row['userid'] && $_GET['userid'] == $row['userid']) { echo("<font color=\"#FF0000\"><b>".$row['nickname']."</b></font>"); } else { echo($row['nickname']); } echo("</a></td><td>".$row['name']."</td><td>".$row['age']."</td><td>".$row['wohnort']."</td>"); echo('<td>'); echo($parks); echo('</td>'); echo('</tr>'); $i++; } } } }[/PHP] Diese Funktion ist eingebettet in eine Tabelle... mit ihr soll man alle User nach der Anzahl besuchter Parks sortieren können. Die derzeitige Ausgabe sieht ungefähr so aus: 1. Morfois 4 2. Noel 6 3. test 3 Problem hierbei: wie lasse ich den User mit den meisten besuchten Parks in der Liste oben stehen? Für Vorschläge währe ich sehr dankbar! Viele Grüße Morfois P.S. $current_year ist immer das aktuelle Jahr, dementsprechent derzeit 2006 ) Zitieren
Morfois Geschrieben 26. Februar 2006 Autor Geschrieben 26. Februar 2006 ^^ na klasse! wenns so einfach währe, würde ich mich bestimmt ned an euch wenden :-) Zitieren
baba007 Geschrieben 26. Februar 2006 Geschrieben 26. Februar 2006 SELECT userid.book_users, nickname.book_users, count(park_id.cbook_besuch) as zaehler FROM book_users, cbook_besuch WHERE online.book_users='1' AND userid.book_users = userid.cbook_besuch AND jahr .... GROUP BY userid.book_users ORDER BY zaehler DESC [/PHP] so vielleicht ? Zitieren
Morfois Geschrieben 26. Februar 2006 Autor Geschrieben 26. Februar 2006 Dankeschöööön, funktioniert super! ^^ Ebenfalls funktionsfähig ist diese Lösung: SELECT count( a.userid ) AS anzahl, a.Jahr, a.userid, nickname, age, wohnort, name FROM cbook_besuch a RIGHT JOIN cbook_users b ON a.userid = b.userid WHERE jahr =2006 GROUP BY userid ORDER BY anzahl DESC Hierbei nochmal vielen Dank an Schiller256! Zitieren
Morfois Geschrieben 26. Februar 2006 Autor Geschrieben 26. Februar 2006 hm.... nun haben ja ein paar user einen park 2 mal besucht. also zum Beispiel: Noel war 2 mal im Europa-Park Morfois war ein mal im Europa-Park und ein mal im Phantasialand dann soll das ergebnis so aussehen: Morfois 2 Noel 1 Zitieren
baba007 Geschrieben 26. Februar 2006 Geschrieben 26. Februar 2006 SELECT userid.book_users, nickname.book_users, count(DISTINCT park_id.cbook_besuch, userid.cbook_besuch) as zaehler FROM book_users, cbook_besuch WHERE online.book_users='1' AND userid.book_users = userid.cbook_besuch AND jahr .... GROUP BY userid.book_users ORDER BY zaehler DESC [/PHP] Zitieren
Morfois Geschrieben 26. Februar 2006 Autor Geschrieben 26. Februar 2006 hm... wie sage ich ihm denn dann hierbei, das er die zwei "zaehler" zusammenaddieren soll??? SELECT cbook_users.userid, cbook_users.name, cbook_users.nickname, cbook_users.age, cbook_users.wohnort, count( DISTINCT cbook_kirmes.kirmesid, cbook_kirmes.userid ) AS zaehler FROM cbook_users, cbook_kirmes WHERE cbook_users.online = '1' AND cbook_users.userid = cbook_kirmes.userid AND jahr = '2006' GROUP BY cbook_users.userid UNION SELECT cbook_users.userid, cbook_users.name, cbook_users.nickname, cbook_users.age, cbook_users.wohnort, count( DISTINCT cbook_ride.rideid, cbook_ride.userid ) AS zaehler FROM cbook_users, cbook_ride WHERE cbook_users.online = '1' AND cbook_users.userid = cbook_ride.userid AND jahr = '2006' GROUP BY cbook_users.userid ORDER BY zaehler DESC[/PHP] Zitieren
baba007 Geschrieben 26. Februar 2006 Geschrieben 26. Februar 2006 was kommt den als ausgabe raus und was willst du wissen ? Zitieren
Morfois Geschrieben 26. Februar 2006 Autor Geschrieben 26. Februar 2006 im prinzip das selbe wie oben, nur das es hier um insgesammt 3 tabellen geht. würde man beide SELECTS seperat ausführen und per PHP die zaehler addieren dann währe dies mein ergebnis, nach dem ich sortieren will! Zitieren
Morfois Geschrieben 27. Februar 2006 Autor Geschrieben 27. Februar 2006 ich möchte also quasi die anzahl der einträge der tabelle cbook_ride aller user, welche online='1' sind mit denen der tabelle cbook_kirmes addieren, jedoch nicht die wirkliche anzahl, sondern die anzahl der gefahrenen bahnen, d.h. 2 mal eine bahn gefahren bedeutet für den user nicht fahrten == 2 sondern anzahl gefahrener bahnen == 1... plus dann natürlich die anzahl der tabelle cbook_kirmes. Und danach will ich dann anzahl DESC sortieren! fertig :-) Zitieren
Morfois Geschrieben 27. Februar 2006 Autor Geschrieben 27. Februar 2006 hab ich schon verschiedene möglichkeiten probiert, aber das funzt ned so dolle. Zitieren
baba007 Geschrieben 27. Februar 2006 Geschrieben 27. Februar 2006 würde man beide SELECTS seperat ausführen und per PHP die zaehler addieren dann währe dies mein ergebnis, nach dem ich sortieren will! dann mach das so, was spricht dagegen ? andere Lösungen sehe ich nicht Zitieren
Morfois Geschrieben 27. Februar 2006 Autor Geschrieben 27. Februar 2006 ja aber dann bekomme ich doch einen fehler in der sortierung. oder etwa nicht? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.