「未定義の変数: display1」を表示します。while ループを表示できます。問題は、$display1 が while ループで定義されていることであり、$i のインクリメントがあるため、その中にある必要があります。
//SQL for display category name
$query1="SELECT cat_name FROM restaurant_category WHERE rest_id={$display}";
$result1=mysql_query($query1);
$rowNum1=mysql_num_rows($result1);
//SQL for display dish information of each category
$query3="SELECT cat_id FROM restaurant_category WHERE cat_name={$display1}";
$result3=mysql_query($query3);
$display3=mysql_query($result3);
$query2="SELECT dish_name, dish_description, dish_price FROM dish WHERE cat_id={$display3}";
$result2=mysql_query($query2);
$rowNum2=mysql_num_rows($result2);
$data=mysql_fetch_row($result2);
while($i<$rowNum1)
{
$display1=mysql_result($result1,$i,"cat_name");
//display category name
while($j<$rowNum2)
{//display dish information}
}