Sarkons Posted February 27, 2013 Share Posted February 27, 2013 (edited) 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 February 27, 2013 by Sarkons Quote Link to comment https://forums.phpfreaks.com/topic/275001-while-loop-remove-duplicates-and-echo-once/ Share on other sites More sharing options...
Barand Posted February 27, 2013 Share Posted February 27, 2013 pseudocode prev = '' while next row { if (subject != prev { subjectoutput = subject prev = subject } else subjectoutput = ''; // ouput table row using subjectoutput } Quote Link to comment https://forums.phpfreaks.com/topic/275001-while-loop-remove-duplicates-and-echo-once/#findComment-1415334 Share on other sites More sharing options...
Sarkons Posted February 27, 2013 Author Share Posted February 27, 2013 Hi Barand, Thanks for the reply. I tried that and unfortuantly it did not work, the subjects still echo duplicates. Thanks! Quote Link to comment https://forums.phpfreaks.com/topic/275001-while-loop-remove-duplicates-and-echo-once/#findComment-1415424 Share on other sites More sharing options...
Psycho Posted February 27, 2013 Share Posted February 27, 2013 I tried that and unfortuantly it did not work, the subjects still echo duplicates. Where is your code? Barand only provided pseudo code, so we need to see what you implemented. Quote Link to comment https://forums.phpfreaks.com/topic/275001-while-loop-remove-duplicates-and-echo-once/#findComment-1415426 Share on other sites More sharing options...
Sarkons Posted February 27, 2013 Author Share Posted February 27, 2013 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; } } } Quote Link to comment https://forums.phpfreaks.com/topic/275001-while-loop-remove-duplicates-and-echo-once/#findComment-1415429 Share on other sites More sharing options...
Solution Psycho Posted February 27, 2013 Solution Share Posted February 27, 2013 (edited) 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 February 27, 2013 by Psycho Quote Link to comment https://forums.phpfreaks.com/topic/275001-while-loop-remove-duplicates-and-echo-once/#findComment-1415431 Share on other sites More sharing options...
Sarkons Posted February 27, 2013 Author Share Posted February 27, 2013 (edited) Yeah i was unaware of the meaning "pseudo", thanks for filling me in! Anywho now everything is working well. Thank you Psycho and Barand much appreciated! Edited February 27, 2013 by Sarkons Quote Link to comment https://forums.phpfreaks.com/topic/275001-while-loop-remove-duplicates-and-echo-once/#findComment-1415453 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.