Hi,
If I am not missing anything, you are not sorting 
SELECT Month, Score 
FROM scores 
WHERE Username = '$Username'

Also, the requirement is not three consecutive test in a
month, so I would not break the loop into months.
once you have it ordered it by the date :

   while (list($Month, $Score) = mysql_fetch_row($result2))
{

    
/* 
here we initialize a counter which we'll use to tally how
many tests the
user has passed over the past 3 months
*/
    
        $tally = 0;
        
        if ($Score >= 75) {
         
        $tally++ ;
    
       }  else {
        $tally = 0;
// here you are bringing the tally back to 0 if they missed
one.
        }
 
       if ($tally=3) { $certified=1 } ;

This should do it. In this loop, if there are three consc.
over 75 scores, then $certified will equal to 1.  Even
$tally goes back to 0, if the student misses a test after
being certified, $certified will not change.


At the end, instead of using $tally>=3 use $certified=='1'


I hope this helps.





I would sort this by date or test_id or whatever.



--- Brian Tully <[EMAIL PROTECTED]> wrote:
> hey folks - 
> 
> i'm stumped. been working on what i thought would be a
> simple script to
> cycle through users' records and perform a query. But I
> can't get the loops
> right, it seems like only one or two records get updated.
> 
> Using MySQL, we have about 2000 students enrolled. each
> month they take a
> test. if they pass the most recent 3 tests
> (consecutively) they earn
> "Certified" status and get a few perks.
> 
> Somehow the certification status' got messed up. So I'm
> trying to create a
> script that will look through each user's test records to
> see if they've
> passed the last 3 tests, and if so, change their
> certification status in the
> database.
> 
> Not very elegant since there are so many records in the
> database (2000
> users), but I don't think i have a choice.
> 
> Anyways, I've tried to loop through each user, and for
> each user loop
> through their scores. But the loops aren't working. I'm
> sure it's something
> simple and obvious I'm missing but my brain is fried!
> 
> I'd appreciate it if someone could take a look and offer
> any advice. It's
> about 65 lines of code (with comments).
> 
> thanks in advance!
> brian
> 
> ________________________________________
> 
> <?php
> 
> include("/home/includes/.connect.inc");
> 
> // Select each Username and start a loop of queries for
> each user
> 
> $query = ("SELECT Username, Certification FROM users");
> 
> $result = mysql_query($query)
>     or die ("Cannot execute query" . mysql_error ());
> 
> /*
> here starts the loop - for each user in the database we
> look at their test
> records and try to establish if they have passed the last
> 3 tests
> consecutively
> */
> 
> while (list($Username, $Certification) =
> mysql_fetch_row($result)) {
> 
>     $query2 = ("SELECT Month, Score FROM scores WHERE
> Username =
> '$Username'");
>     
>     $result2 = mysql_query($query2) or die ("Cannot
> execute query" .
> mysql_error ());
>         
> 
> /*
> for each score record the user has, check to see if
> they've passed the last
> 3 tests
> */
> 
>     while (list($Month, $Score) =
> mysql_fetch_row($result2)) {
> 
>     
> /* 
> here we initialize a counter which we'll use to tally how
> many tests the
> user has passed over the past 3 months
> */
>     
>         $tally = 0;
>         
>         if (($Month == 'January') && ($Score >= 75)) {
>                    
>             $tally++;
>         }
>                 
>         if (($Month == 'December') && ($Score >= 75)) {
>                    
>             $tally++;
>         }
>                 
>         if (($Month == 'November') && ($Score >= 75)) {
>                    
>             $tally++;
>         }
>                 
>         if (($Month == 'October') && ($Score >= 75)) {
>                    
>             $tally++;
>         }
>     
>     }
> 
> /*
> the concept is that if a user has taken and passed the
> last 3 tests, they
> become certified. so we look at the current month first
> and go back 3
> months, since it may be the beginning of the month and
> they may not have
> taken the current months test yet. Since we increase the
> counter for each
> passed test, if the counter equals 3 or more this means
> they have passed 3
> tests and are thereby certified. So we update their
> certification status in
> the database.
> */
> 
>     
>     if ($tally >= 3) {
>     
>         $query1 = ("UPDATE users SET Certification = 'Y'
> WHERE Username =
> '$Username'");
>                    
>         $result1 = mysql_query($query1) or die ("Cannot
> update user to
> Certified" . mysql_error ());
>                    
>     }    
> }
> 
> print ("Update complete!");
> 
> ?>
> 
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> To contact the list administrators, e-mail:
> [EMAIL PROTECTED]
> 


=====
Mehmet Erisen
http://www.erisen.com

__________________________________________________
Do You Yahoo!?
Send FREE video emails in Yahoo! Mail!
http://promo.yahoo.com/videomail/

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to