Seite 2 von 2

Verfasst: 14.11.2004 20:35
von Gumfuzi
Ich habe es nun so:

Code: Alles auswählen

$sql='SELECT S.player, COUNT(*) AS HighScoreCount, SUM(S.score) AS HighScoreSum FROM phpbb_ina_games G INNER JOIN   phpbb_ina_scores S ON G.game_name=S.game_name GROUP BY S.player ORDER BY HighScoreCount DESC';
if(!$result = $db->sql_query($sql)) {
	message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);

while($row = $db->sql_fetchrow($result))
{
	$template->assign_vars('hi', array(
		'PLAYER' => $row['S.player'],
		'ANZAHL' => $row['HighScoreCount'],
		'SUMME' => $row['HighScoreSum']
	));
}
funzt aber nicht.

Warum bleibt das Bild weiss und zeigt nicht die Fehlermeldung, was falsch ist?

Verfasst: 14.11.2004 22:45
von Blutgerinsel
gib mal den SQL Code direkt im PMA ein, vielleicht gibts da ein Problem.....

Fehler einschränken :wink:

Verfasst: 15.11.2004 07:21
von Gumfuzi
dumme Frage: was ist ein PMA?

Verfasst: 15.11.2004 07:51
von Leuchte
KB:phpMyAdmin - KB:pma_faq

Verfasst: 15.11.2004 13:34
von Blutgerinsel
Gumfuzi hat geschrieben:dumme Frage: was ist ein PMA?
So wie es Leuchte schon gesagt hat....

Natürlich könntest du das auch über die MySQL Konsole tätigen aber nunja........

Verfasst: 15.11.2004 18:29
von Gumfuzi
Danke für die Aufklärung :oops: (die Abkürzung kannte ich noch nicht :schäm: )

Ich habe es nun im PMA ausprobiert und dort funzt es, allerdings so:
Name - funzt ;)
HScoreCount - hier werden die Anzahl der Scores (Datensätze) in denen ein User vorkommt zusammengezählt. Allerdings auch, wenn ein User nur zB. die zweitbesten Punkte hatte, was ja falsch ist, denn es sollen ja nur die Scores gezählt werden, bei denen ein User die meisten Punkte (in dem jeweiligen Spiel) hat, nicht alle.
HiScoreSum - funzt, brauche ich aber nicht ;)

und:
warum funzt die Abfrage nicht in der PHP-Datei? *grübel*

Verfasst: 15.11.2004 22:52
von Gumfuzi
ich komme nicht drauf... :oops:

Code: Alles auswählen

SELECT S.player, MAX(S.score) AS HighScoreCount, SUM(S.score) AS HighScoreSum FROM phpbb_ina_games G INNER JOIN phpbb_ina_scores S ON  G.game_name=S.game_name GROUP BY S.player ORDER BY HighScoreCount DESC
Damit erhalte ich pro Spieler den Höchsten HIScore und die Summer der HiScores - also auch nicht das, was ich brauche.

Man müsste den MAX-Befehl erweitern können, sodaß von jedem Spiel der höchste HiScore (mit MAX?) rausgesucht wird und dann die Anzahl pro User gezählt wird - oder so irgendwie...

Oder man reduziert die Liste zuerst auf die höchsten HiScores pro Spiel (inkl. User), schreibt die dann in eine extra Tabelle und liest die Anzahl dann mit folgenden Befehl aus:

Code: Alles auswählen

SELECT S.player, COUNT(*) AS HighScoreCount, SUM(S.score) AS HighScoreSum FROM phpbb_ina_games G INNER JOIN phpbb_ina_scores S ON  G.game_name=S.game_name GROUP BY S.player ORDER BY HighScoreCount DESC
... oder kann man die Select-Abfrage auch verschachteln?

P.S.: PMA zum Probieren von SQL-Anweisungen ist super, daran hatte ich vorher nie gedacht - ist viel schneller, als via PHP-Datei zu testen

=====

*edit*

folgender Code (z.T. vom Activity Mod) zeigt mir alle HiScores (die Besten Spieler pro Spiel):

Code: Alles auswählen

	$sql = "SELECT * FROM " . iNA_GAMES . "
		ORDER BY game_name";
	if( !$result = $db->sql_query($sql) )
	{
		message_die(GENERAL_ERROR, $lang['no_game_data'], "", __LINE__, __FILE__, $sql);
	}
	$game_count = $db->sql_numrows($result);
	$game_rows = $db->sql_fetchrowset($result);

	for($i = 0; $i < $game_count; $i++)
	{
		$game_id = $game_rows[$i]['game_id'];
		$game_name = $game_rows[$i]['game_name'];

		if ($game_rows[$i]['reverse_list'])
		{
			$list_type = 'ASC';
		}
		else
		{
			$list_type = 'DESC';
		}

		$sql = "SELECT * FROM " . iNA_SCORES . " 
         WHERE game_name = '" . $game_name . "' 
         ORDER BY score $list_type, date ASC";
		 if(!$result = $db->sql_query($sql))
		{
			message_die(GENERAL_ERROR, $lang['no_score_data'], "", __LINE__, __FILE__, $sql);
		}
		$score_info = $db->sql_fetchrow($result);
		$best_score = $score_info['score'];
		$best_player = $score_info['player'];

		$template->assign_block_vars("game", array(
			"BEST_SCORE" => $best_score,
			"BEST_PLAYER" => $best_player,
			"NAME" => $game_name)
	);
	}
Wie soll ich die nun zählen lassen, sodaß ich für jeden User die Anzahl der HiScores erhalte? soll ich dazu Arrays verwenden, die kann man doch zählen, oder?
Aber wie teile ich es per PHP mit, welche Spielernamen gezählt werden sollen (mom sind ja noch die Namen mehrmals vertreten)...

Verfasst: 15.11.2004 23:21
von Blutgerinsel
Ab Mysql 4.0.0 gibt es UNION damit sind verschachtelte SELECTs möglich

-> http://dev.mysql.com/doc/mysql/de/UNION.html#IDX1346

Verfasst: 15.11.2004 23:27
von Gumfuzi
Ich habe leider MySQL 3.23.58 - schade.

Was sagst zu zum "edit"-Teil meines letzten Postings? komme ich so weiter?