Page 1 of 1

in_array problem

Posted: Fri Feb 23, 2007 2:58 pm
by vzwhaley
I cannot get the following in_array to loop through all of the values of the $CuisineListS array. Does anyone know how to correctly loop through an in_array? In the following code, I should have 5 matches, but it only echoes one match. Any tips will be appreciated.

Code: Select all

$sql = "SELECT * FROM Restaurants WHERE ID = '6'"; 
	$Recordset = mysql_query($sql);
	$RS = mysql_fetch_assoc($Recordset);
	
	$sql1 = "SELECT * FROM RestaurantsCuisine ORDER BY CuisineType ASC";
	$Recordset1 = mysql_query($sql1);
	
$Cuisine = $RS['Cuisine'];
$CuisineListS = explode("|", $Cuisine);

while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) {

	if(in_array($row_Recordset1['ID'], $CuisineListS)) {
	   echo "Match: " . $row_Recordset1['ID'] . "<br><br>";
	   }
}

Posted: Fri Feb 23, 2007 4:53 pm
by volka
try

Code: Select all

error_reporting(E_ALL); ini_set('display_errors', true); // for debugging
$sql = "SELECT Cuisine FROM Restaurants WHERE ID = '6'";
$Recordset = mysql_query($sql) or die(mysql_errors().': '.$sql);
if ( false!== ($RS=mysql_fetch_array($Recordset, MYSQL_ASSOC)) ) {
	$CuisineList = array_map('intval', explode("|", $RS['Cuisine']));
	$CuisineList = join(',', $CuisineList);
	$sql = "SELECT
			ID
		FROM
			RestaurantsCuisine
		WHERE
			ID IN ( $CuisineList )
		ORDER BY
			CuisineType ASC";
       
	$result = mysql_query($sql) or die(mysql_errors().': '.$sql);
  while ( false!== ($row=mysql_fetch_array($result, MYSQL_ASSOC)) ) {
		echo 'Match: ' , $row['ID'] , "<br />\n";
	}
}
even better: don't store a all id in one file but normalize the tables. Then you can query all you need with one single sql statement. see http://en.wikipedia.org/wiki/Database_normalization