Optimized query for unread group postings

This commit is contained in:
Michael Vogel 2016-02-13 18:15:24 +01:00
parent 036311237f
commit bf7dedb03b
2 changed files with 21 additions and 20 deletions

View File

@ -362,14 +362,13 @@ function groups_containing($uid,$c) {
*/ */
function groups_count_unseen() { function groups_count_unseen() {
$r = q("SELECT `group`.`id`, `group`.`name`, COUNT(`item`.`id`) AS `count` FROM `group`, `group_member`, `item` $r = q("SELECT `group`.`id`, `group`.`name`,
WHERE `group`.`uid` = %d (SELECT COUNT(*) FROM `item`
AND `item`.`uid` = %d WHERE `uid` = %d AND `unseen` AND
AND `item`.`unseen` AND `item`.`visible` `contact-id` IN (SELECT `contact-id` FROM `group_member`
AND NOT `item`.`deleted` WHERE `group_member`.`gid` = `group`.`id` AND `group_member`.`uid` = %d)) AS `count`
AND `item`.`contact-id` = `group_member`.`contact-id` FROM `group` WHERE `group`.`uid` = %d;",
AND `group_member`.`gid` = `group`.`id` intval(local_user()),
GROUP BY `group`.`id` ",
intval(local_user()), intval(local_user()),
intval(local_user()) intval(local_user())
); );

View File

@ -221,17 +221,19 @@ function ping_init(&$a) {
if (count($groups_unseen)) { if (count($groups_unseen)) {
echo '<groups>'; echo '<groups>';
foreach ($groups_unseen as $it) { foreach ($groups_unseen as $it)
if ($it['count'] > 0)
echo '<group id="'.$it['id'].'">'.$it['count']."</group>"; echo '<group id="'.$it['id'].'">'.$it['count']."</group>";
}
echo "</groups>"; echo "</groups>";
} }
if (count($forums_unseen)) { if (count($forums_unseen)) {
echo '<forums>'; echo '<forums>';
foreach ($forums_unseen as $it) { foreach ($forums_unseen as $it)
if ($it['count'] > 0)
echo '<forum id="'.$it['id'].'">'.$it['count']."</forum>"; echo '<forum id="'.$it['id'].'">'.$it['count']."</forum>";
}
echo "</forums>"; echo "</forums>";
} }