[PHP/MySQL] DB Auslesen -->DESC --> max. 5xAnzeigen

Froeschel

Well-known member
ID: 267003
L
4 Mai 2006
325
2
Hallo,
habe folgenden Code zur Ausgabe
Code:
<?$res7 = mysql_query("SELECT * FROM top_winner Order by menge DESC Limit 1 ");?>
<?$top = mysql_result($res7,0,"menge");?>
<?$top1 = mysql_result($res7,0,"uid");?>
<?$top2 = mysql_result($res7,0,"slot");?>
<?=$top.' '?> <?=$top1.' '?> <?=$top2.' '?>

das zeigt auf der Seite z.B. an:
2000000 188908 Tooltime

Das Problem ist das in der DB schon 5 Einträge sind und der die nicht anzeigt
Was muss ich ändern damit der max. 5 Gewinner pro Slot anzeigt. ( wenn da mal mehrere Slots und Gewinne drinnen stehen )

Vielleicht kann mir ja einer das Teil da oben optimieren. Bin froh das ich es als Nichtprogger überhaupt soweit gebracht habe das der mir das anzeigt :mrgreen:
 
Dein Select limitiert die Ausgabe ja auf einen Datensatz mit "LIMIT 1". Lass das "LIMIT" weg oder änder die Anzahl auf 5.
 
Froeschel schrieb:
Bei Limit 5 zeigt der auch nur 1 Datensatz an
Wenn ich Limit weg lasse auch
Ist ja auch kein Wunder, denn so wie mir scheint wertest du mit mysql_result auch nur den ersten Datensatz aus (schau mal hier: https://www.php-center.de/de-html-manual/function.mysql-result.html).

Mach das mal inne Schleife:

Code:
<?php
$i = 0;
$res7 = mysql_query("SELECT * FROM top_winner Order by menge DESC Limit 1 ");
while($i < 5) {
  top = mysql_result($res7,$i,"menge");
  $top1 = mysql_result($res7,$i,"uid");
  $top2 = mysql_result($res7,$i,"slot");
  =$top.' '
 =$top1.' ' =$top2.' '
$i++;
}
?>

Programmiert hast du bisher noch nicht, oder?
 
Zuletzt bearbeitet:
Seemann schrieb:
Mach das mal inne Schleife:

Code:
<?php
$i = 0;
while($i < 5) {
  $res7 = mysql_query("SELECT * FROM top_winner Order by menge DESC Limit 1 ");
  top = mysql_result($res7,$i,"menge");
  $top1 = mysql_result($res7,$i,"uid");
  $top2 = mysql_result($res7,$i,"slot");
  =$top.' '
 =$top1.' ' =$top2.' '
}
?>

Programmiert hast du bisher noch nicht, oder?

Der Code ist jetzt nicht dein Ernst ?

1. Liefert er 5 mal das gleiche Ergebnis
2. Ist er total performancelastig


So ist es z.B. besser
 
Johnson schrieb:
Der Code ist jetzt nicht dein Ernst ?

1. Liefert er 5 mal das gleiche Ergebnis
2. Ist er total performancelastig
1. Ja, mein Gott, scheiß Inkrement vergessen. Shit happens.
2. Es ist der Kot vom Threadsteller, möglichst gering verändert, damit er üpberhaupt noch weiß worum es geht.
 
Seemann schrieb:
Ist ja auch kein Wunder, denn so wie mir scheint wertest du mit mysql_result auch nur den ersten Datensatz aus (schau mal hier: https://www.php-center.de/de-html-manual/function.mysql-result.html).

Mach das mal inne Schleife:

Code:
<?php
$i = 0;
while($i < 5) {
  $res7 = mysql_query("SELECT * FROM top_winner Order by menge DESC Limit 1 ");
  top = mysql_result($res7,$i,"menge");
  $top1 = mysql_result($res7,$i,"uid");
  $top2 = mysql_result($res7,$i,"slot");
  =$top.' '
 =$top1.' ' =$top2.' '
}
?>

Programmiert hast du bisher noch nicht, oder?

überarbeite nbochmal deinen code seit wann kommt der query den man auswerten will in die schleife

und wieso macht ihr nicht "DISTINCT" und "LIMIT 0,5" im Query und in der While als bedingung fetch_object()??
 
Froeschel schrieb:
P.S.
Jo,der Code funzt zo nicht
Ich hab ihn noch ein, zwei mal verändert. Probiers mal.

Ich klinke mich dann hier aus, da es hier scheinbar ein paar Piepels gibt die besser Bescheid wissen. Nix für ungut.
 
Seemann schrieb:
Schon längst geschehen... :yawn:

jo ok habs schon gesehen aber ich bin der meinung wenn error_reporzting E_ALL steht wird das fehler bringen weil dein $i++; sinnlos ist du holst ja immernoch nur 1 Ergebnis wenn dann setzt wenigstens LIMIT 0,5 sonst ist die while sinnlos
 
ich tät es so machen
PHP:
$sql = "SELECT * FROM top_winner ORDER BY menge DESC LIMIT 0,5";
$result = mysql_query($sql) OR die("Fehler bei TopGewinner: ".mysql_error());
while ($row = mysql_fetch_assoc($result)) 
  echo $row["menge"]." ".$row["uid"]." ".$row["slot"]."<br>";
edit: evtl. würde ich auch nur menge,uid und slot selektieren, wenn die tab noch duzende andere attribute hat.
 
Thomas schrieb:
ich tät es so machen
PHP:
$sql = "SELECT * FROM top_winner ORDER BY menge DESC LIMIT 0,5";
$result = mysql_query($sql) OR die("Fehler bei TopGewinner: ".mysql_error());
while ($row = mysql_fetch_assoc($result)) 
  echo $row["menge"]." ".$row["uid"]." ".$row["slot"]."<br>";
edit: evtl. würde ich auch nur menge,uid und slot selektieren, wenn die tab noch duzende andere attribute hat.

Thx das geht :mrgreen:

habs gerade mal mit sowas probiert. Geht aber nicht. Zeigt nur die KlammID an
Code:
<?php 
            $top_winner = @mysql_query("SELECT * FROM top_winner Order by menge DESC Limit 3"); 
            $counter = 1; 
                while($line = @mysql_fetch_object($top_winner))  
                { 
                echo '<tr>'; 
                echo '<td width="30" align="left">'.$menge.'</td>'; 
                echo '<td width="250">'.$uid.'</td>'; 
                echo '<td width="250">'.$slot.'</td>'; 
                echo '</tr>'; 
            $counter++; 
                } 
    ?>
 
Froeschel schrieb:
habs gerade mal mit sowas probiert. Geht aber nicht. Zeigt nur die KlammID an
a) SELECT * = :evil:
b) Ich würde auch die Objekteigenschaften ausgeben. Da sind die Werte nämlich nach mysql_fetch_object() drinnen :roll:
 
Thomas schrieb:
Is einfach so :p
Ne, das zieht die Performance runter, wenn ned alle Felder gebraucht werden (und das ist wohl relativ immer der Fall) und es zeugt - und das is mir wichtiger - von schlechtem Programmierstil. Selbst wenn alle Felder der Tabelle gebraucht werden, müsste man im Falle einer Tabellenstrukturänderung den Code ändern, weil man die zusätzlichen Felder dann nicht mehr braucht. Lieber also gleich gut machen.
Wenn ich im Forum Tips gebe, lasse ich schlechtes nicht stehen, sondern versuche gleich zu zeigen, wie man es besser macht :)
 
Habs jetzt so gelöst. Das funzt und wird alles schön angezeigt.
Thx2 all. Wer mag kann sich hier noch weiter streiten. Ich schaue gerne zu :mrgreen:

Code:
	<?php 
            $top_winner = @mysql_query("SELECT menge, uid, slot FROM top_winner Order by menge DESC Limit 3"); 
            $counter = 1; 
                while($line = @mysql_fetch_object($top_winner))  
                { 
                echo '<tr>'; 
                echo '<td width="150" align="left">'.$line->menge.'</td>'; 
                echo '<td width="150">'.$line->uid.'</td>'; 
                echo '<td width="150">'.$line->slot.'</td>';
                echo '</tr>'; 
            $counter++; 
                } 
    ?>
 
@Freoschel

wofür zählst du nen $counter hoch die wird doch nirgendwo angezeigt

wenn du das net brauchst und anzeigen willst dann lösch die beiden zeilen, die sind nicht nötig ;)