Sletsames Problem mit for-schleife

silent_scream

Grünschnabel
Hallo,

konnte mir schon einige Hilfreiche Tips ´von Euch holen, doch jetzt muss ich mal selbst eine Frage stellen:

Was mache ich hier falsch?
Code:
		$res_edit = mysql_query("SELECT * FROM T_Playlist_Lied WHERE P_ID =".$p_id);
		$num_edit = mysql_num_rows($res_edit);
		
		for ($i=0; $i<$num_edit; $i++)
			{
				$row_edit = mysql_fetch_array($res_edit);
//				print_r ($row_edit);

				if ($row_edit['L_ID'] == 999999)
					{
					
						$res_edit1 = mysql_query("SELECT * FROM T_LIED_eigene WHERE P_ID =".$row_edit['P_ID']);
						$num_edit1 = mysql_num_rows($res_edit1);
						$row_edit1 = mysql_fetch_array($res_edit1);
?>
	<tr>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_L_Titel'];?></font></td>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_B_Name'];?></font></td>
		<td bgcolor="#FFFFFF"><input type="checkbox" name="wunsch" value="1" disabled <? if ($row_edit['PL_Wunsch'] == 1) { echo "checked"; } ?>></td>
	</tr>

<?
					}
				else
					{
						$res_edit2 = mysql_query("SELECT * FROM T_LIED as lied LEFT JOIN T_BAND as band ON lied.B_ID = band.B_ID WHERE lied.L_ID =".$row_edit['L_ID']);
						$num_edit2 = mysql_num_rows($res_edit2);
						$row_edit2 = mysql_fetch_array($res_edit2);
					
?>
	<tr>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit2['L_Titel'];?></font></td>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit2['B_Name'];?></font></td>
		<td bgcolor="#FFFFFF"><input type="checkbox" name="wunsch" value="1" disabled <? if ($row_edit['PL_Wunsch'] == 1) { echo "checked"; } ?>></td>
	</tr>

<?
					}
			}
?>


Mein Problem liegt ab folgendem Punkt vor:

Code:
if ($row_edit['L_ID'] == 999999)
					{
					
						$res_edit1 = mysql_query("SELECT * FROM T_LIED_eigene WHERE P_ID =".$row_edit['P_ID']);
						$num_edit1 = mysql_num_rows($res_edit1);
						$row_edit1 = mysql_fetch_array($res_edit1);
?>
	<tr>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_L_Titel'];?></font></td>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_B_Name'];?></font></td>
		<td bgcolor="#FFFFFF"><input type="checkbox" name="wunsch" value="1" disabled <? if ($row_edit['PL_Wunsch'] == 1) { echo "checked"; } ?>></td>
	</tr>

<?
					}


Dieses Konstrukt liefert mir, egal wie oft das ganze durchlaufen wird, immer den gleichen Datensatz zurück. Woran kann das liegen und hat vielleicht jemand einen Lösungsvorschlag? Hab mir schon die Finger wundausprobiert deswegen.... HILFE! :)

Besten Dank schon mal an alle Hilfsbereiten!

silent_scream
 
Meines Wissen kann das eigentlich nicht klappen, da du die gleiche ressource verwendest, die durch das hier vor allem unnötige mysql_num_rows() abgearbeitet ist... Man kann es aber wohl mit mysql_seek oder so zurücksetzen, habe ich aber noch nicht gebrahct daher besser mal bei http://de.php.net/manual nachschauen.

Aber generell würde ich Datensätze effizienterweise via while statt umständlicher for-Schleife mit vorherigem Zeilenzählen abholen, also eher so

PHP:
$sth = mysql_query(...) or die(mysql_error());
while( $row = mysql_fetch_assoc($sth))
{
 //....
}
 
erst mal danke für deine schnelle Antwort!

@ mysql_seek: Diese Funktion scheints in der Form nicht zu geben, zumindest nicht auf dem Link, den Du gepostet hast und in den Büchern die ich hier zur Verfügung hab.

@ Rest: Oke, seh ich ein, das das so effizienter ist!

Hat jemand noch ne Idee, woran das liegen könnte? Bin für alle vorschläge offen! :)

Gruß,
silent_scream
 
Hallo ,
Du wirst leider die While Schleife nach dem Muster des vorherigen Post durchlaufen müßen um alle DS in Dein ARRAY zubekommen. So wie Dein Code-Beispiel aussieht wirst Du leider nur den ersten DS bekommen.
Also am besten nutzt Du den Vorschlag von "Smaragd", mit Deinem Beispiel weiss die Query nicht, dass sie sich bewegen soll.

Bis denn Dann Patrick
 
PHP:
		$res_edit = mysql_query("SELECT * FROM T_Playlist_Lied WHERE P_ID =".$p_id);
		$num_edit = mysql_num_rows($res_edit);
		
		for ($i=0; $i<$num_edit; $i++)
			{
				$row_edit = mysql_fetch_array($res_edit);
//				print_r ($row_edit);

				if ($row_edit['L_ID'] == 999999)
					{
					
						$res_edit1 = mysql_query("SELECT * FROM T_LIED_eigene WHERE P_ID =".$row_edit['P_ID']);
						$num_edit1 = mysql_num_rows($res_edit1);
						$row_edit1 = mysql_fetch_array($res_edit1);
?>
	<tr>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_L_Titel'];?></font></td>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_B_Name'];?></font></td>
		<td bgcolor="#FFFFFF"><input type="checkbox" name="wunsch" value="1" disabled <? if ($row_edit['PL_Wunsch'] == 1) { echo "checked"; } ?>></td>
	</tr>

<?
					}
				else
					{
						$res_edit2 = mysql_query("SELECT * FROM T_LIED as lied LEFT JOIN T_BAND as band ON lied.B_ID = band.B_ID WHERE lied.L_ID =".$row_edit['L_ID']);
						$num_edit2 = mysql_num_rows($res_edit2);
						$row_edit2 = mysql_fetch_array($res_edit2);
					
?>
	<tr>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit2['L_Titel'];?></font></td>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit2['B_Name'];?></font></td>
		<td bgcolor="#FFFFFF"><input type="checkbox" name="wunsch" value="1" disabled <? if ($row_edit['PL_Wunsch'] == 1) { echo "checked"; } ?>></td>
	</tr>

<?
					}
			}
?>

Mein Problem liegt ab folgendem Punkt vor:

PHP:
if ($row_edit['L_ID'] == 999999)
					{
					
						$res_edit1 = mysql_query("SELECT * FROM T_LIED_eigene WHERE P_ID =".$row_edit['P_ID']);
						$num_edit1 = mysql_num_rows($res_edit1);
						$row_edit1 = mysql_fetch_array($res_edit1);
?>
	<tr>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_L_Titel'];?></font></td>
		<td bgcolor="#FFFFFF"><font face="Tahoma" color="#808080" size="1"><?echo $row_edit1['LE_B_Name'];?></font></td>
		<td bgcolor="#FFFFFF"><input type="checkbox" name="wunsch" value="1" disabled <? if ($row_edit['PL_Wunsch'] == 1) { echo "checked"; } ?>></td>
	</tr>

<?
					}


Dachte schon es wäre nich eingerückt :)

Btw: Es klappt nicht, wenn du keinen abschliesenden Tag verwendest. also [/PHP]
 
Danke für die Hilfe! Habs jetzt hinbekommen! Mir ist aufgefallen, das die Datensätze, die ich aus der Tabelle bekomme nicht eindeutig genug sind, deshalb wurde mir auch immer der gleiche Datensatz angezeigt. Aber das mit den While-Schleifen hat meinen Code um einiges übersichtlicher (und auch kürzer) gemacht! :)

Danke euch allen!

silent_scream
 
Zurück