Link to home
Start Free TrialLog in
Avatar of t3chguy
t3chguyFlag for United States of America

asked on

add rowspan if previous value equals current value php while

I'm trying to add a rowspan to table cell if the previous date is equal to the current row's date. I have it now so that it doesn't display the date, but I still need it to add a rowspan and that is what I'm stuck on.


$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities"); 

if(mysql_num_rows($getOpps) > 0)
    {
    $prevDate = '';

    while($oppData = mysql_fetch_assoc($getOpps))
        {
        //Check registrations
        $checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");

        if(mysql_num_rows($checkReg) > 0)
            {
            while($regData = mysql_fetch_assoc($checkReg))
                {
                if($regData['totalRegistered'] > 0)
                    {
                    $totalRegistered = $regData['totalRegistered'];
                    }

                else
                    {
                    $totalRegistered = '0';
                    }
                }
            }

        $altrow = 'class="alt1"';

        $currentDate = $oppData['event_date'];

        $seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);

        if($seatsAvailable > 0)
            {
            $link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
            }

        else
            {
            $link = 'All spots have been filled.';
            }

        echo '<tr>';


        if($currentDate == $prevDate)
            {
            echo '<td>&nbsp;</td>';
            }

        else
            {
            echo '<td ' . $altrow . '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
            }

        echo '
                <td ' . $altrow . '>'.$oppData['meeting_time'] .'</td>
                <td ' . $altrow . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
             </tr>';

        $prevDate = $currentDate;
        }
    }

Open in new window

Avatar of Ray Paseur
Ray Paseur
Flag of United States of America image

I'll take a look at it.  While I do that, please read this article.  MySQL is dead and to avoid having your script become dead, you will need to make a change.
https://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Databases/A_11177-PHP-MySQL-Deprecated-as-of-PHP-5-5-0.html
Avatar of Gary
Do you mean here?

       if($currentDate == $prevDate)
            {
            echo '<td>&nbsp;</td>';
            }


Just change to and add the colspans amount
 echo '<td colspan="">&nbsp;</td>';
Avatar of t3chguy

ASKER

echo '<td ' . $altrow . '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';

Open in new window


^That cell there needs to have the rowspan added to it and this one...

<td colspan="">&nbsp;</td>'; 

Open in new window


should no longer exist because the date has been carried down.
Replace that whole if else block with

$currentDate == $prevDate ? $cols=' colspan="2"' : $cols='';

echo '<td ' . $altrow . $cols . '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';

Open in new window

Avatar of t3chguy

ASKER

I need the rowspan to be set though. and if I use your code and change the colspan to rowspan it messes up the table view even more.
My mistake, just change it to rowspan.

$currentDate == $prevDate ? $rowspan=' rowspan="2"' : $rowspan='';

echo '<td ' . $altrow . $rowspan. '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';

Open in new window

Avatar of t3chguy

ASKER

This is the result of that code.

User generated image
Avatar of t3chguy

ASKER

This is the ultimate goal of the page.

User generated image
$currentDate == $prevDate ? $rowspan=' rowspan="2"' : $rowspan='';

if($currentDate != $prevDate){

echo '<td ' . $altrow . $rowspan. '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
}

Open in new window


Yeah I realised where it was going wrong.
Avatar of t3chguy

ASKER

User generated image
We are closer now.
I'm hacking it in reverse, so everything is rowspan=2 unless it is the same date - I think my logic is right...
$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities"); 

if(mysql_num_rows($getOpps) > 0)
    {
    $prevDate = '';

    while($oppData = mysql_fetch_assoc($getOpps))
        {
        //Check registrations
        $checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");

        if(mysql_num_rows($checkReg) > 0)
            {
            while($regData = mysql_fetch_assoc($checkReg))
                {
                if($regData['totalRegistered'] > 0)
                    {
                    $totalRegistered = $regData['totalRegistered'];
                    }

                else
                    {
                    $totalRegistered = '0';
                    }
                }
            }

        $altrow = 'class="alt1"';

        $currentDate = $oppData['event_date'];

        $seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);

        if($seatsAvailable > 0)
            {
            $link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
            }

        else
            {
            $link = 'All spots have been filled.';
            }

        echo '<tr>';

	$currentDate != $prevDate ? $rowspan=' rowspan="2"' : $rowspan='';

	if($currentDate != $prevDate){
		echo '<td ' . $altrow . 'rowspan="2">' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
	}

        echo '
                <td ' . $altrow . $rowspan . '>'.$oppData['meeting_time'] .'</td>
                <td ' . $altrow . $rowspan . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
             </tr>';

        $prevDate = $currentDate;
        }
    }

Open in new window

Avatar of t3chguy

ASKER

Here is what that produces now:

User generated image
Can you post the HTML, that screen shot looks like its not terminating the <TR>
Avatar of t3chguy

ASKER

<table width = "750px" cellspacing = "0" cellpadding = "0">
			<tr>	
				<td class="tblHeader">Date</td>
				<td class="tblHeader">Time</td>
				<td class="tblHeader">Need</td>
			</tr><tr><td class="alt1"rowspan="2">Monday, Nov 18</td>
                <td class="alt1" rowspan="2">11am-1pm</td>
                <td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC1">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC2">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="2">Tuesday, Nov 19</td>
                <td class="alt1" rowspan="2">11am-1pm</td>
                <td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC3">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC4">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="2">Wednesday, Nov 20</td>
                <td class="alt1" rowspan="2">11am-1pm</td>
                <td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC5">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC6">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="2">Thursday, Nov 21</td>
                <td class="alt1" rowspan="2">11am-1pm</td>
                <td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC7">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 3 <a href="registerNow.php?id=SCC8">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="2">Friday, Nov 22</td>
                <td class="alt1" rowspan="2">4pm-6pm</td>
                <td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC10">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">11am-1pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC9">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="2">Saturday, Nov 23</td>
                <td class="alt1" rowspan="2">10am-1pm</td>
                <td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC11">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">1pm-3pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC12">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="2">Sunday, Nov 24</td>
                <td class="alt1" rowspan="2">1pm-4pm</td>
                <td class="alt1" rowspan="2">0 of 5 <a href="registerNow.php?id=SCC13">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="2">Monday, Nov 25</td>
                <td class="alt1" rowspan="2">11am-1pm</td>
                <td class="alt1" rowspan="2">0 of 3 <a href="registerNow.php?id=SCC14">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 4 <a href="registerNow.php?id=SCC15">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">5:30PM</td>
                <td class="alt1">0 of 3 <a href="registerNow.php?id=SCC16">Volunteer Now</a></td>
             </tr></table>

Open in new window

Gonna have to store the rows in a var til you have made one pass, think I've got the logic correct here

$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities"); 

if(mysql_num_rows($getOpps) > 0)
    {
    $prevDate = '';
    $currow="";
    while($oppData = mysql_fetch_assoc($getOpps))
        {
        //Check registrations
        $checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");

        if(mysql_num_rows($checkReg) > 0)
            {
            while($regData = mysql_fetch_assoc($checkReg))
                {
                if($regData['totalRegistered'] > 0)
                    {
                    $totalRegistered = $regData['totalRegistered'];
                    }

                else
                    {
                    $totalRegistered = '0';
                    }
                }
            }

        $altrow = 'class="alt1"';

        $currentDate = $oppData['event_date'];

        $seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);

        if($seatsAvailable > 0)
            {
            $link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
            }

        else
            {
            $link = 'All spots have been filled.';
            }


	if($currentDate == $prevDate ){
		$currow=str_replace('spantemp',' rowspan="2"',$currow);
	}
	else {
		echo str_replace('spantemp','',$currow);
		$currow = "";
	}

        $currow .=  '<tr>';


	if($currentDate != $prevDate){
		$currow .=  '<td ' . $altrow . 'spantemp>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
	}

        $currow .=  '
                <td ' . $altrow . '>'.$oppData['meeting_time'] .'</td>
                <td ' . $altrow . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
             </tr>';

        $prevDate = $currentDate;
        }
    }
	echo str_replace('spantemp','',$currow);

Open in new window

Avatar of t3chguy

ASKER

Close! The only issue now is the last record (the third) for the 25th moved to the left column where it should be apart of the rest.
Avatar of t3chguy

ASKER

User generated image
Can you have more than 2 rows? That's what it looks like from the last part
Avatar of t3chguy

ASKER

Yes...there is just the one case where I have 3 rows.
Try this, I'm not quite sure its right but I will be leaving soon

$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities"); 

if(mysql_num_rows($getOpps) > 0)
    {
    $prevDate = '';
    $currow="";
    $rowcounter=0;
    while($oppData = mysql_fetch_assoc($getOpps))
        {
        //Check registrations
        $checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");

        if(mysql_num_rows($checkReg) > 0)
            {
            while($regData = mysql_fetch_assoc($checkReg))
                {
                if($regData['totalRegistered'] > 0)
                    {
                    $totalRegistered = $regData['totalRegistered'];
                    }

                else
                    {
                    $totalRegistered = '0';
                    }
                }
            }

        $altrow = 'class="alt1"';

        $currentDate = $oppData['event_date'];

        $seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);

        if($seatsAvailable > 0)
            {
            $link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
            }

        else
            {
            $link = 'All spots have been filled.';
            }


	if($currentDate == $prevDate ){
		$rowcounter++;
	}
	elseif($rowcounter!=0) {
		echo str_replace('spantemp','rowspan="'.$rowcounter.'"',$currow);
		$currow = "";
		$rowcounter=0;
	}
	else{
		echo str_replace('spantemp','',$currow);
		$currow = "";
		$rowcounter=0;
	}

        $currow .=  '<tr>';


	if($currentDate != $prevDate){
		$currow .=  '<td ' . $altrow . 'spantemp>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
	}

        $currow .=  '
                <td ' . $altrow . '>'.$oppData['meeting_time'] .'</td>
                <td ' . $altrow . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
             </tr>';

        $prevDate = $currentDate;
        }
    }
	echo str_replace('spantemp','',$currow);

Open in new window

Avatar of t3chguy

ASKER

Yeah everything became misaligned with that last update.
Can you post the HTML, makes it easier to understand where it is going wrong rather than trying to wrack my brain.
Avatar of t3chguy

ASKER

<table width = "750px" cellspacing = "0" cellpadding = "0">
			<tr>	
				<td class="tblHeader">Date</td>
				<td class="tblHeader">Time</td>
				<td class="tblHeader">Need</td>
			</tr><tr><td class="alt1"rowspan="1">Monday, Nov 18</td>
                <td class="alt1">11am-1pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC1">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC2">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="1">Tuesday, Nov 19</td>
                <td class="alt1">11am-1pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC3">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC4">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="1">Wednesday, Nov 20</td>
                <td class="alt1">11am-1pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC5">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC6">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="1">Thursday, Nov 21</td>
                <td class="alt1">11am-1pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC7">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 3 <a href="registerNow.php?id=SCC8">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="1">Friday, Nov 22</td>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC10">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">11am-1pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC9">Volunteer Now</a></td>
             </tr><tr><td class="alt1"rowspan="1">Saturday, Nov 23</td>
                <td class="alt1">10am-1pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC11">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">1pm-3pm</td>
                <td class="alt1">0 of 2 <a href="registerNow.php?id=SCC12">Volunteer Now</a></td>
             </tr><tr><td class="alt1">Sunday, Nov 24</td>
                <td class="alt1">1pm-4pm</td>
                <td class="alt1">0 of 5 <a href="registerNow.php?id=SCC13">Volunteer Now</a></td>
             </tr><tr><td class="alt1">Monday, Nov 25</td>
                <td class="alt1">11am-1pm</td>
                <td class="alt1">0 of 3 <a href="registerNow.php?id=SCC14">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">4pm-6pm</td>
                <td class="alt1">0 of 4 <a href="registerNow.php?id=SCC15">Volunteer Now</a></td>
             </tr><tr>
                <td class="alt1">5:30PM</td>
                <td class="alt1">0 of 3 <a href="registerNow.php?id=SCC16">Volunteer Now</a></td>
             </tr>
</table>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Gary
Gary
Flag of Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of t3chguy

ASKER

Excellent solution!  Thank you for all the work you put into it!