[PHP/MySQL] suche hilfe bei sql abfrage

andreasnisz

Well-known member
ID: 23926
L
24 April 2006
103
33
Hallo, ich mache gerade meine ersten Programmierversuche, also ich möchte eine Liste haben in der meine Spiele und der aktuelle Highscore stehen. im Moment bin ich so weit

https://www.das-gameboard.de/forum/games2.php

meine abfrage sieht so aus:


$template->set_filenames(array('body' => 'games.tpl'));
$sqlString= $sql="SELECT s.game_name, u.user_id, u.username AS player, s.player_id, s.score, g.game_id, g.game_desc
FROM phpbb_ina_scores s, phpbb_ina_games g, phpbb_users u
WHERE u.user_id = s.player_id AND s.game_name = g.game_desc
ORDER BY game_name ASC";
$rs=mysql_query($sqlString);
while ($line = mysql_fetch_array($rs))
{

$template->assign_block_vars("total",array(
"U_GAME_PLAY" => append_sid("./activity.php?mode=game&id=" . $line["game_id"]),
"NAME" => $line["game_desc"],
"SPIELER" => $line["player"],
"SCORE" => $line["score"]
));
}

Meine Fragen dazu:
1. Das Wichtigste wär ob es möglich ist das nur der erste Platz angezeigt wird, jetzt werden alle Plätze angezeigt, also wenn ein Spiel 10 mal in diesem Monat gespielt wurde stehen alle 10 Scores in der Liste.

2. Schön wär es auch wenn alle Spiele angezeigt werden und nicht nur die bei denen es schon einen Highscore gibt.

3. Mich stören die 4 Nullen hinter dem Komma ein wenig, kann man die irgendwie wegkriegen?

So das war schon alles :D seit bitte nicht so streng, wie gesagt das ist mein erster Versuch was eigenes zu machen :)
 
Erstmal: Dass dein Code nicht unbedingt eine Augenweide ist, weißt du hoffentlich selbst - ich nehme jetzt aber mal Rücksicht darauf, weil du ja, wie du selbst sagst, Anfänger bist. ;)

1. Das Wichtigste wär ob es möglich ist das nur der erste Platz angezeigt wird, jetzt werden alle Plätze angezeigt, also wenn ein Spiel 10 mal in diesem Monat gespielt wurde stehen alle 10 Scores in der Liste.

2. Schön wär es auch wenn alle Spiele angezeigt werden und nicht nur die bei denen es schon einen Highscore gibt.
Das sollte in etwa so funktionieren:
PHP:
SELECT s.game_name, u.user_id, u.username AS player, s.player_id, s.score, g.game_id, g.game_desc FROM phpbb_ina_games g LEFT JOIN phpbb_ina_scores s ON s.game_name=g.game_desc INNER JOIN phpbb_users u ON u.user_id = s.player_id GROUP BY g.game_name ORDER BY s.score DESC, g.game_name ASC
(wenn ein Fehler drin ist, einfach nochmal melden, gerade frei aus dem Kopf aufgeschrieben, ohne zu testen. ;))

3. Mich stören die 4 Nullen hinter dem Komma ein wenig, kann man die irgendwie wegkriegen?
PHP: number_format ;)

Gruß
raven
 
Erstmal schonmal danke, ich versuche das nachher mal :)

anfänger ist noch fast untertrieben, ich habe nur etwas grundwissen in diversen foren gesammelt und bin wild am experimentieren ;D
 
Also irgendwie glaube ich das ich aufgebe :)

Mein neues Problem ist das ich gerade gemerkt habe das nicht alle Spiele angezeigt werden. Ich habe z.B. im Moment 7 Highscores, die auch in der Datenbank stehen, aber in meiner Liste stehe ich nur ein mal. Hat jemand ne Idee warum nicht alle Dateb die in der Tabelle stehen ausgegeben werden?
 
Hallo, ich habe jetzt alles mögliche ausprobiert. also das aus dem 1. Beitrag, das was raven vorgeschlagen hat.
dann habe ich es mit ner anderen tabelle versucht. im moment habe ich das drin

$sql="SELECT s.highscore_year,s.highscore_mon, s.highscore_game, s.highscore_player, s.highscore_score, g.game_desc, g.game_id
FROM phpbb_ina_highscore s, phpbb_ina_games g
WHERE s.highscore_game=g.game_desc AND highscore_year = 2008 AND highscore_mon = 2
ORDER BY highscore_player ASC";

aber auch wenn ich es nur mit der highscore tabelle versuche, also so

$sql="SELECT highscore_year,highscore_mon,highscore_game,highscore_player,highscore_score
FROM phpbb_ina_highscore
WHERE highscore_year = 2008 AND highscore_mon = 2
ORDER BY highscore_player ASC";
werden nicht alle daten angezeigt die in der datenbank stehen.
 
Die einzelnen Tabellen und deren Aufbau wären auch ganz interessant, um die Statements nachvollziehen zu können.

Wieviele Sätze stehen denn in der
phpbb_ina_highscore,
und wieviele davon werden angezeigt ?
 
Ich habs tatsächlich geschafft, also jetzt siehts so aus:

SELECT s.highscore_year, s.highscore_mon, s.highscore_game, s.highscore_player, s.highscore_score, g.game_desc, game_id
FROM phpbb_ina_highscore s, phpbb_ina_games g
WHERE s.highscore_year = 2008 AND s.highscore_mon = 2 AND s.highscore_game = g.game_name
ORDER BY highscore_player ASC, highscore_game ASC

mein fehler war hier AND s.highscore_game = g.game_name

ich hatte AND s.highscore_game = g.game_desc deswegen wurden nur die spiele angezeigt bei denen dateiname und der name der im forum angezeigt wird gleich sind, ich haber aber einige umbenannt.

Der Code zwar immer noch keine Schönheit, aber für meinen ersten Versuch bin ich ganz zufrieden, immerhin funktioniert es :)