Jump to content

[SOLVED] Find out percent of columns filled in


marksie1988

Recommended Posts

hi,

 

i have a database which is basically a questionaire that people can save and then finish filling in later on but what i want to do is let them see a %tage of what they have filled in so for e.g.

 

Questionaire 1 - 50% complete

Questionaire 2 - 10% complete

 

the only thing that im stuck on is how to find out the %tage that they have filled out, here is the table

CREATE TABLE IF NOT EXISTS `mod1pae` (
  `id` int(4) NOT NULL auto_increment,
  `userid` int(4) NOT NULL,
  `q1` text NOT NULL,
  `q2` text NOT NULL,
  `q3` text NOT NULL,
  `q4` text NOT NULL,
  `q5` text NOT NULL,
  `q6` text NOT NULL,
  `q7` text NOT NULL,
  `q8` text NOT NULL,
  `q9` text NOT NULL,
  `q10` text NOT NULL,
  `q11` text NOT NULL,
  `q12` text NOT NULL,
  `q13` text NOT NULL,
  `q14` text NOT NULL,
  `q15` text NOT NULL,
  `perc` varchar(3) default NULL,
  PRIMARY KEY  (`id`)
)

 

the perc column is for the percentage to be stored if that is easier then creating it on the fly, i did think about doing if !empty $perc= 6.6% for each question and then add it up at the end but this is a lengthy piece of code wondered if there is an easier way?

 

Regards

Steve

 

$filled = 0;
$query = "SELECT * FROM modlpae WHERE userid = '$user'";
$result = mysql_query($query) or die('Error : ' . mysql_error());
$total = mysql_num_rows($result);
$track = $total;
while ($row = mysql_fetch_assoc($result)) {
$q = "q".$track;
if($row[$q] != '') {
$filled++;
$track--;
}
else {
$track--;
}
}
$percentage = $filled/$track*100;
echo $percentage;
?>

Seems that i was a bit too fast with my reply,

 

that code you gave me always says 0 for the percentage :S  not sure what is causing it

 

EDIT: looks like the script you gave me only tries to select the database and then once the data is pulled through it finds 1 row and then puts a q before it making q1 and obviously this wont return the percentage of filled in columns :S

 

so looks like your way would only work if each question was put into the database as a row but it isnt each user gets one line which has the question in it, or would it be easier to have a row for each question and then a user id column that linked that question to a user?

<?php 

$query = "SELECT * FROM modlpae WHERE userid = '$user'";
$result = mysql_query($query) or die('Error : ' . mysql_error());

$total_questions = 15;
$qcounter = 1;
$filled = 0;

while ($row = mysql_fetch_assoc($result)) {

if(!is_null($row["q".$qcounter]) || $row["q".$qcounter] != '') {
   $filled++;
}

$qcounter++;

}
$percentage = ($filled/$total_questions)*100;
echo $percentage;
?>

try

<?php 
$query = "SELECT * FROM modlpae WHERE userid = '$user'";
$result = mysql_query($query) or die('Error : ' . mysql_error());
$total_questions = 15;
while ($row = mysql_fetch_assoc($result)) {
$filled = 0;
for ($qcounter = 1; $qcounter <= $total_questions; $qcounter++){
	if(!is_null($row["q".$qcounter]) || $row["q".$qcounter] != '') $filled++;
}
echo $percentage = ($filled/$total_questions)*100,"%\n";
}
?>

ups

<?php 
$query = "SELECT * FROM modlpae WHERE userid = '$user'";
$result = mysql_query($query) or die('Error : ' . mysql_error());
$total_questions = 15;
while ($row = mysql_fetch_assoc($result)) {
$filled = 0;
for ($qcounter = 1; $qcounter <= $total_questions; $qcounter++){
	if(!is_null($row["q".$qcounter]) and $row["q".$qcounter] != '') $filled++;
}
echo $percentage = ($filled/$total_questions)*100,"%\n";
}
?>

change or to and

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.