Jump to content

Duplicates from \IPS\Member::constructFromData($row)


Recommended Posts

I created a very simple plugin to query results.  My query is this:

\IPS\Db::i()->select( 
                '*',
                'forums_topics', 
                '(approved = 1) AND (forum_id = 2)',
                'rand(), start_date desc limit 5 )
                ->join('core_members', 'member_id = starter_id')
                );

I then run it through a loop:

foreach ($sql as $row) {
            $users[] = \IPS\Member::constructFromData($row);        
        }    

And finally I return this value to the template:

return $this->output($users);

The issue is that I am seeing repeat results, even though the query returns unique results.  So $sql[0]["tid"] thorugh $sql[4]["tid"] gives me unique results, however $users[0]->tid through $users[4]->tid gives me repeats.  I cannot figure out why this is.  See attached for an example of the returned results.

Is there a better way for me to produce the above?  Or is there an issue with the function "\IPS\Member::constructFromData" perhaps?

 

Could contain: Text, Text Message

Edited by chopin
Link to comment
Share on other sites

Thanks for posting!

Unfortunately, this issue is beyond the scope of our technical support. 👩‍💻

Our technical support is happy to help you with the Invision Community platform, but we're unable to help with things like server management, theme questions and modifications.

I've moved this to our Community Support area where other Invision Community owners will see it and help where they can.

Link to comment
Share on other sites

Confused. Do you want a list of topics or members with that code? Because it currently loads multiple topics and joins the members table. If there are multiple topics by the same user you end up with the duplicates in your screenshot.

 

If you want topics you should use:

foreach ($sql as $row)
{
	$topics[] = \IPS\forums\Topic::constructFromData($row);        
}  

 

If, instead, you indeed want a list of users then you should check the user hasn't been added to the array already:

foreach ($sql as $row)
{
	if (!isset($users[ $row['member_id'] ]) )
	{
		$users[ $row['member_id'] ] = \IPS\Member::constructFromData($row);
	}
}

Or change the query that loads the data.

Link to comment
Share on other sites

Oh I see the issue.  I was using the wrong built in function for what I wanted.  It is ok for multiple members to be published, I am looking for topics with few responses.  So I would need:

\IPS\forums\Topic::constructFromData($row); 

That should solve my problem, thank you.

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...