Jump to content

While Loop Remove Duplicates and echo once


Sarkons

Recommended Posts

Hey Guys! I've been trying to figure out how to tackle a solution for this, on the site you have a combobox to select a subject and add other fields aswell. My problem is if the subjects are the same group them together and only echo the subject once but echo the other fields aswell.

if($execute){
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sthandre = $con->prepare("SELECT book.id, book.title, book.url, book.viewer, book.sub_id, subj.subject_id, subj.name FROM book LEFT JOIN subj ON(book.sub_id = subj.subject_id) WHERE book.username_id = :yourid ORDER BY subj.subject_id");
$sthandre->execute(array(':yourid'=>$userid));
while ($row = $sthandre->fetch()){ 
$bmid = ($row ['id']);
$title = ($row ['title']);
$url = ($row ['url']);
$audience= ucfirst($row ['viewer']);
$subid = ($row ['subject_id']);
$subjectname = ($row ['name']);
//somehow if the subject name is a duplicate echo it once and carry on with the other variables looping
echo "$subjectname,$title,$audience"
}
}

 

 

the current output;

 

Subject | Title         |audience

------------------------------------------------------

|Classic | The Who | Everyone|

|Classic | The End  | Mature    |

|Classic | Happy     | Teen        |

|Other   | Last        | Everyone |

 

what im hoping it to be;

 

Subject | Title         |audience

------------------------------------------------------

|Classic | The Who | Everyone|

|            | The End  | Mature    |

|            | Happy     | Teen        |

|Other   | Last        | Everyone |

 

it will be in another format its just easier to explain in a grid format.

 

Thanks i appreciate it!

pseudocode

 

 

prev = ''
 
while next row {
    if (subject != prev {
        subjectoutput = subject
        prev = subject
    }
    else subjectoutput = '';
    // ouput table row using subjectoutput
}

Sorry about that :)

 

Heres what i have

if($execute){
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sthandre = $con->prepare("SELECT book.id, book.title, book.url, book.viewer, book.sub_id, subj.subject_id, subj.name FROM book LEFT JOIN subj ON(book.sub_id = subj.subject_id) WHERE book.username_id = :yourid ORDER BY subj.subject_id");
$sthandre->execute(array(':yourid'=>$userid));
while ($row = $sthandre->fetch()){ 
$bmid = ($row ['id']);
$title = ($row ['title']);
$url = ($row ['url']);
$audience= ucfirst($row ['viewer']);
$subid = ($row ['subject_id']);
$subjectname = ($row ['name']);
//somehow if the subject name is a duplicate echo it once and carry on with the other variables looping
$prev = '';

while(next ($row)){
	if ($subject != $prev) {
		$subjectoutput = $subject;
		$prev = $subject;
	
	}
	else $subjectoutput = '';
	
	echo $subjectoutput;		
}

}
}

Do you understand what is meant by pseudo code? It is just mock code to illustrate the logic to be used - not actual working code.

 

while(next ($row)){

 

means nothing in your actual code above. It was just meant to illustrate getting the next record.

 

if($execute)
{
    $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $query = "SELECT book.id, book.title, book.url, book.viewer, book.sub_id, subj.subject_id, subj.name
              FROM book
              LEFT JOIN subj
                ON(book.sub_id = subj.subject_id)
              WHERE book.username_id = :yourid
              ORDER BY subj.subject_id";
    $sthandre = $con->prepare($query);
    $sthandre->execute(array(':yourid'=>$userid));

    $prevSubject = false;
    while ($row = $sthandre->fetch())
    {
        $bmid        = ($row['id']);
        $title       = ($row['title']);
        $url         = ($row['url']);
        $audience    = ucfirst($row ['viewer']);
        $subid       = ($row['subject_id']);
        $subjectname = ($row['name']);
        if($prevSubject == $subjectname)
        {
            //If subject name same as last, then empty value
            // - or do whatever you want to do differently
            $subjectname = '';
        }
        //somehow if the subject name is a duplicate echo it once and carry on with the other variables looping
        echo "$subjectname, $title, $audience"
        $prevSubject = $subjectname
    }
}

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.