Die Anzahl von zurückgelieferten Datensätzen ist falsch

McGregor

Grünschnabel
Hallo,

ich habe nach meinem Problem gesucht und es nirgends gefunden. Falls es doch was gibt,
Thema ruhig verschieben oder schließen.

Mit PHP und SQL habe ich eigentlich nur geringe Kenntnisse.
Ich hab folgenden Code:

$sql="SELECT name, kaempfe, punkteeigen, punktefremd, ringe FROM $tabellenname WHERE jahr = '04/05' && mannschaft = 'LG-1' ORDER BY punkteeigen DESC";
$link = mysql_connect("x" , "y", "z");
mysql_select_db("x", $link);
$result= mysql_query($sql, $link);
for($i=0;$i<mysql_num_rows($result);$i++)
{
$ergebnis[$i]=mysql_fetch_array($result);
}

//Jetzt kommt der Kopf der Tabelle per HTML

for($i=0;$i<count($ergebnis);$i++)
{
$platz = $i+1;
echo '<tr><td align="center">'.$platz.'</td>';
echo '<td>'.$ergebnis[$i][name].'</td>';
echo '<td align="center">'.$ergebnis[$i][kaempfe].'</td>';
echo '<td align="center">'.$ergebnis[$i][ringe].'</td>';
echo '<td align="center">'.$ergebnis[$i][punkteeigen].' : '.$ergebnis[$i][punktefremd].'</td></tr>';
}

In meiner DB habe ich 6 Datensätze.
Die Tabelle die mir jetzt angezeigt wird, hat aber 10 Zeilen (7 bis 10 sind bis auf den Eintrag Platz 7 bis Platz 10 leer)
Wo kommen diese letzten 4 Zeilen her?
Kann mir da jemand weiterhelfen, wie ich diese "falschen" Zeilen wieder los werde?

Danke schon mal.
 
Bis du ganz sicher das du nur 6 Datensätze hast? Ich habe keinen fehler in deinem Code gefunden.

Probier das zum die Anzahl Datensätze zu bestimmen:
PHP:
$strEntry = "SELECT COUNT(*) FROM $tabellenname WHERE jahr='04/05' AND mannschaft='LG-1' ORDER BY punkteeigen DESC";
$sqlResult = mysql_query($strEntry, $connection);
$arrResult = mysql_fetch_row($sqlResult);

echo $arrResult[0];
 
Probier mal folgendes:
PHP:
<?php
	[…]
	$link = mysql_connect("x" , "y", "z");
	mysql_select_db("x", $link);

	$query = "
		SELECT
		        `name`,
		        `kaempfe`,
		        `punkteeigen`,
		        `punktefremd`,
		        `ringe`

		  FROM
		        `".$tabellenname."`

		  WHERE
		        `jahr` = '04/05'
		    AND `mannschaft = 'LG-1'

		  ORDER BY
		        `punkteeigen` DESC
		";
	$result = mysql_query($query, $link);
	$i = 0;
	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		$i++;
		echo '<tr><td align="center">'.$i.'</td>';
		echo '<td>'.$row['name'].'</td>';
		echo '<td align="center">'.$row['kaempfe'].'</td>';
		echo '<td align="center">'.$row['ringe'].'</td>';
		echo '<td align="center">'.$row['punkteeigen'].' : '.$row['punktefremd'].'</td></tr>';
	}
	[…]
?>
 
lepl hat gesagt.:
Bis du ganz sicher das du nur 6 Datensätze hast? Ich habe keinen fehler in deinem Code gefunden.

Probier das zum die Anzahl Datensätze zu bestimmen:
PHP:
$strEntry = "SELECT COUNT(*) FROM $tabellenname WHERE jahr='04/05' AND mannschaft='LG-1' ORDER BY punkteeigen DESC";
$sqlResult = mysql_query($strEntry, $connection);
$arrResult = mysql_fetch_row($sqlResult);

echo $arrResult[0];

Bin mir sicher, da ich auf die DB direkt zugreifen kann und die 6 Datensätze zum testen
per Hand eingetragen habe. :-)

Hab Deinen Code ausprobiert und er liefert die Anzahl: 6

@Gumbo
bin grad dabei Deines zu testen
 
Gumbo hat gesagt.:
Probier mal folgendes:
PHP:
<?php
	[…]
	$link = mysql_connect("x" , "y", "z");
	mysql_select_db("x", $link);

	$query = "
		SELECT
		        `name`,
		        `kaempfe`,
		        `punkteeigen`,
		        `punktefremd`,
		        `ringe`

		  FROM
		        `".$tabellenname."`

		  WHERE
		        `jahr` = '04/05'
		    AND `mannschaft = 'LG-1'

		  ORDER BY
		        `punkteeigen` DESC
		";
	$result = mysql_query($query, $link);
	$i = 0;
	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		$i++;
		echo '<tr><td align="center">'.$i.'</td>';
		echo '<td>'.$row['name'].'</td>';
		echo '<td align="center">'.$row['kaempfe'].'</td>';
		echo '<td align="center">'.$row['ringe'].'</td>';
		echo '<td align="center">'.$row['punkteeigen'].' : '.$row['punktefremd'].'</td></tr>';
	}
	[…]
?>


Funktioniert! Jetzt werden als Ergebnis die 6 Datensätze geliefert! :-)
Und jetzt kommt wohl die dümmste Frage überhaupt:
Warum?
Könntest Du mir erklären warum es sorum geht und andersrum nicht?
Ich speicher das Ergebnis in einem Array ab und Du auch, liegt das jetzt nur
an der while (Was macht mysql_assoc)?
Auf alle Fälle schon mal ein großes Danke!
 
Wie wär's mit der Antwort, dass sechs Datensätze den Kriterien entsprechen?
Die Funktion mysql_fetch_array() erstellt aus der Ergebnismenge ein Feld. Die while-Kontrollstruktur sorgt nun dafür, dass die Ausgabe solange erfolgt, bis der Ausdruck unwahr wird (d. h. alle Ergebisse wurden verarbeitet, der „Zeiger“ ist am Ende der Ergebnismenge angekommen).
 
Zurück