Jump to content

While Loop Remove Duplicates and echo once


Go to solution Solved by Psycho,

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!

Edited by Sarkons

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;		
}

}
}
  • Solution

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
    }
}
Edited by Psycho
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.