conversation sql optimisations

This commit is contained in:
friendica 2012-01-02 16:54:37 -08:00
parent f1ee5f48d4
commit 4c35a6b0d7
3 changed files with 72 additions and 28 deletions

View file

@ -884,3 +884,62 @@ function status_editor($a,$x, $notes_cid = 0) {
return $o;
}
function conv_sort($arr,$order) {
if((!(is_array($arr) && count($arr))))
return array();
$parents = array();
foreach($arr as $x)
if($x['id'] == $x['parent'])
$parents[] = $x;
if(stristr($order,'created'))
usort($parents,'sort_thr_created');
elseif(stristr($order,'commented'))
usort($parents,'sort_thr_commented');
foreach($parents as $x)
$x['children'] = array();
foreach($arr as $x) {
if($x['id'] != $x['parent']) {
$p = find_thread_parent_index($parents,$x);
$parents[$p]['children'][] = $x;
}
}
foreach($parents as $x)
if(count($x['children']))
usort($x['children'],'sort_thr_created_rev');
$ret = array();
foreach($parents as $x) {
$ret[] = $x;
foreach($x['children'] as $y)
$ret[] = $y;
}
return $ret;
}
function sort_thr_created($a,$b) {
return strcmp($b['created'],$a['created']);
}
function sort_thr_created_rev($a,$b) {
return strcmp($a['created'],$b['created']);
}
function sort_thr_commented($a,$b) {
return strcmp($b['commented'],$a['commented']);
}
function find_thread_parent_index($arr,$x) {
foreach($arr as $k => $v)
if($v['id'] == $x['parent'])
return $k;
}

View file

@ -15,14 +15,6 @@ function network_init(&$a) {
$search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : '');
// We need a better way of managing a growing argument list
// moved into savedsearches()
// $srchurl = '/network'
// . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '')
// . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '')
// . ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : '');
if(x($_GET,'save')) {
$r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1",
intval(local_user()),
@ -46,14 +38,10 @@ function network_init(&$a) {
// search terms header
if(x($_GET,'search')) {
$a->page['content'] .= '<h2>Search Results For: ' . $search . '</h2>';
$a->page['content'] .= '<h2>' . t('Search Results For:') . ' ' . $search . '</h2>';
}
$a->page['aside'] .= group_side('network','network',true,$group_id);
// moved to saved searches to have it in the same div
//$a->page['aside'] .= search($search,'netsearch-box',$srchurl,true);
$a->page['aside'] .= saved_searches($search);
}
@ -275,12 +263,6 @@ function network_content(&$a, $update = 0) {
$sql_options = (($star) ? " and starred = 1 " : '');
$sql_options .= (($bmark) ? " and bookmark = 1 " : '');
$sql_new = '';
$sql_items = '';
$sql_update = '';
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $sql_options ) ";
if($group) {
@ -467,16 +449,18 @@ function network_content(&$a, $update = 0) {
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, (SELECT `p`.`id`,`p`.`created`,`p`.`commented` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact`
FROM `item`, `contact`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
AND `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s )
$sql_extra
ORDER BY `parentitem`.$ordering DESC, `parentitem`.`id` ASC, `item`.`gravity` ASC, `item`.`created` ASC ",
AND `item`.`parent` IN ( %s )
$sql_extra ",
intval(local_user()),
dbesc($parents_str)
);
$items = conv_sort($items,$ordering);
}
}

View file

@ -167,7 +167,7 @@ function profile_content(&$a, $update = 0) {
$r = q("SELECT distinct(parent) AS `item_id`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
and `item`.`parent` in (select parent from item where unseen = 1 )
and `item`.`unseen` = 1
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `item`.`wall` = 1
$sql_extra
@ -218,18 +218,19 @@ function profile_content(&$a, $update = 0) {
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
`contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent` = `p`.`id`) AS `parentitem`, `contact`
FROM `item`, `contact`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
AND `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s )
$sql_extra
ORDER BY `parentitem`.`created` DESC, `gravity` ASC, `item`.`created` ASC ",
AND `item`.`parent` IN ( %s )
$sql_extra ",
intval($a->profile['profile_uid']),
dbesc($parents_str)
);
}
$items = conv_sort($items,'created');
if($is_owner && ! $update) {
$o .= get_birthdays();
$o .= get_events();