i have this piece of code that selects all users from the table and another sql statement that counts the number of records for every user. the problem I’m facing is that i have a sql in a foreach loop which is not good for performance but i wasn’t able to combine both of them in one statement. any advise?
$query = $db->getAll("SELECT * FROM users");
foreach($query as $v){
$tpl->setCurrentBlock('useri');
$query2 = $db->numRows("SELECT * FROM signups AS s INNER JOIN users AS u ON s.userid=u.id WHERE u.id={$v['id']}");
$tpl->setVariable('total',$query2);
$tpl->setVariable($v);
$tpl->parseCurrentBlock();
}
Try this query against your DB:
I hope I got it right. I have no SQL DB to test it right here. Important: You have to group by each field you select that is no aggregate.
Edit:
If it is not fast enough yet, an index on
signups.useridmay help. This is hypothetic, however, so you should check the Execution Plan your query engine generates.