Loop through 3 times

I'm trying to automate our patients meal choices for our galley.
When a patient comes in, a nurse will get their meal choice for the next three meals and enter them into the computer.
It will show up like this:

name    Room    meal1   meal2   meal3

What I need help with is if there is only one meal for a person (might be waiting for approval to change diet or they may be going home before the 2nd meal), I need the system to put two blank cells in the table so everything lines up right.

The code I have is this which works great if there are three meals entered.

$today_time = date ("H:i");
$food_query = "SELECT fo.*, me.*, mc.* FROM food AS fo INNER JOIN mealchoice AS mc ON fo.Choice=mc.MCID INNER JOIN meal AS me ON me.MID=fo.Meal WHERE Patient = '$nurse_id' AND FDate >= '$current_date' Order By FDate, MID ASC"; 
							$food_query_result = mysql_query($food_query);

							if (mysql_num_rows($food_query_result) > 0)
							{
                                                           $count = 0;
								while ($food_row = mysql_fetch_assoc($food_query_result))

								{
									$food_id = $food_row['FID'];
							                $Meal = $food_row['MealChoice'];
									$Choice = $food_row['MealChoice1'];
									$Comments = $food_row['Comments'];
							
                                                                             echo"<td>$Choice </td>\n";
							
								$count++;
    if ($count == 3)
      break;
}								
							}

Open in new window

BHUCAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Ray PaseurCommented:
I can't see from the code how you would know the number of meals.  Would it be determinable by the number of rows returned from the query?

Also, you have a database conversion coming up.
0
BHUCAuthor Commented:
I only want it to show the next three... so if one meal is entered, it would show
Choice   Add Meal   Add Meal

If two were entered, it would show
Choice     Choice     Add Meal

They can only enter up to three in advance.

Does that make sense.

I'll read up on the data conversion
0
Ray PaseurCommented:
Not quite...  Let me ask the question another way.  Regarding this:

$food_query_result = mysql_query($food_query);

What would you expect to find in mysql_num_rows($food_query_result) ?
0
Acronis Data Cloud 7.8 Enhances Cyber Protection

A closer look at five essential enhancements that benefit end-users and help MSPs take their cloud data protection business further.

BHUCAuthor Commented:
If any meals have been entered, I would find the number of meals that have been entered and what they are.. if no meals have been entered for that patient, there wouldn't be anything...

BTW - thanks for always making me think.. I learn stuff by seeing it work and making changes.. you always make me understand what I am doing... I know enough to be dangerous but don't always understand why something is done a certain way.
0
Ray PaseurCommented:
I can't test this so you will have to.  I think it's correct or pretty close.

Since we expect no more than 3 rows, we set the query LIMIT to three.  And we have a three position array to hold the meal choices.  We initialize all three of the array positions to NULL.  As we retrieve the rows, we overwrite the NULL positions in the $meals array.  Finally, we use the three $meals array positions to create our <td> statements.
$today_time = date ("H:i");
$food_query = "SELECT fo.*, me.*, mc.* FROM food AS fo INNER JOIN mealchoice AS mc ON fo.Choice=mc.MCID INNER JOIN meal AS me ON me.MID=fo.Meal WHERE Patient = '$nurse_id' AND FDate >= '$current_date' Order By FDate, MID ASC LIMIT 3"; 
$food_query_result = mysql_query($food_query);

// SET THE MEAL CHOICES TO NULLS
$meals[1] = $meals[2] = $meals[3] = NULL;

// SET THE COUNTER TO ZERO
$cnt = 0;
while ($food_row = mysql_fetch_assoc($food_query_result))
{
    // INCREMENT THE COUNTER TO PROVIDE AN INDEX INTO THE MEAL CHOICES
    $cnt++;
    
    $food_id = $food_row['FID'];
    $Meal = $food_row['MealChoice'];
    $Choice = $food_row['MealChoice1'];
    $Comments = $food_row['Comments'];
    
    // SAVE THIS MEAL INFORMATION
    $meals[$cnt] = $Choice;
}

// CREATE THE TABLE DATA ELEMENTS
$out = NULL;
$out .= '<td>' . $meals[1] . '</td>';
$out .= '<td>' . $meals[2] . '</td>';
$out .= '<td>' . $meals[3] . '</td>';

// WRITE THE TABLE DATA TO THE BROWSER
echo $out;

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
BHUCAuthor Commented:
Ray...

1) I had the Limit 3 in there and took it out because I thought it was duplicating the count. Now I know!
2) Code works great - but how do I set the value to "Add Meal" so if nothing is there, it will print out the "Add meal" and the user can click on it to add the meal to the database?  Is it in the $meals[1] = $meals[2] = $meals[3] = NULL; line?

3) is there a difference in writing it out using the echo stuff I usually use vs how you did it? Or is it just a preference for a coder?
0
BHUCAuthor Commented:
Ray, I answered my own question in #2, but was wondering about preference in writing code with echo vs how you did it.
0
Ray PaseurCommented:
As long as you produce the correct output, either way is OK.  I like to write scripts that produce all of my variables before there is any browser output.  Then I can use templates (learn about HEREDOC) to generate the HTML documents.  I find that this makes it easier to change templates and style the output.  For a really good explanation of the ideas, get Matt Zandstra's book.  It's not 100% up-to-date, nor is it light reading, but it has a wealth of good information for programmers.
http://www.amazon.com/Objects-Patterns-Practice-Experts-Source/dp/143022925X/
0
BHUCAuthor Commented:
Thank you so much!
0
Ray PaseurCommented:
Glad to be able to help.  Thanks for the points and thanks for using E-E, ~Ray
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
PHP

From novice to tech pro — start learning today.