Proposed attempt at enhancing database queries
This commit is contained in:
parent
38fde526eb
commit
7109719b5c
@ -705,15 +705,15 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService
|
|||||||
if ($userservice->isLoggedOn()) {
|
if ($userservice->isLoggedOn()) {
|
||||||
// All public bookmarks, user's own bookmarks
|
// All public bookmarks, user's own bookmarks
|
||||||
// and any shared with user
|
// and any shared with user
|
||||||
$privacy = ' AND ((B.bStatus = 0) OR (B.uId = '. $sId .')';
|
$privacy = ' ((B.bStatus = 0) OR (B.uId = '. $sId .')';
|
||||||
$watchnames = $userservice->getWatchNames($sId, true);
|
$watchlist = $userservice->getWatchlist($sId);
|
||||||
foreach ($watchnames as $watchuser) {
|
foreach ($watchlist as $watchuserID) {
|
||||||
$privacy .= ' OR (U.username = "'. $watchuser .'" AND B.bStatus = 1)';
|
$privacy .= ' OR (B.uId = '. $watchuserID .' AND B.bStatus = 1)';
|
||||||
}
|
}
|
||||||
$privacy .= ')';
|
$privacy .= ')';
|
||||||
} else {
|
} else {
|
||||||
// Just public bookmarks
|
// Just public bookmarks
|
||||||
$privacy = ' AND B.bStatus = 0';
|
$privacy = ' B.bStatus = 0';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up the tags, if need be.
|
// Set up the tags, if need be.
|
||||||
@ -727,16 +727,20 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set up the SQL query.
|
// Set up the SQL query.
|
||||||
$query_1 = 'SELECT DISTINCT ';
|
$query_1 = 'SELECT DISTINCT(B.bHash), ';
|
||||||
|
$query_1.= '(select '. $userservice->getFieldName('username');
|
||||||
|
$query_1.= ' from '. $userservice->getTableName();
|
||||||
|
$query_1.= ' where uId=B.uId';
|
||||||
|
$query_1.= ') as '. $userservice->getFieldName('username') .', ';
|
||||||
|
|
||||||
if (SQL_LAYER == 'mysql4') {
|
if (SQL_LAYER == 'mysql4') {
|
||||||
$query_1 .= 'SQL_CALC_FOUND_ROWS ';
|
$query_1 .= 'SQL_CALC_FOUND_ROWS ';
|
||||||
}
|
}
|
||||||
$query_1 .= 'B.*, U.'. $userservice->getFieldName('username');
|
$query_1 .= 'B.*';
|
||||||
|
|
||||||
$query_2 = ' FROM '. $userservice->getTableName() .' AS U'
|
$query_2 = ' FROM '. $this->getTableName() .' AS B';
|
||||||
. ', '. $this->getTableName() .' AS B';
|
|
||||||
|
|
||||||
$query_3 = ' WHERE B.uId = U.'. $userservice->getFieldName('primary') . $privacy;
|
$query_3 = ' WHERE '. $privacy;
|
||||||
|
|
||||||
if ($GLOBALS['enableVoting'] && $GLOBALS['hideBelowVoting'] !== null
|
if ($GLOBALS['enableVoting'] && $GLOBALS['hideBelowVoting'] !== null
|
||||||
&& !$userservice->isAdmin($userservice->getCurrentUserId())
|
&& !$userservice->isAdmin($userservice->getCurrentUserId())
|
||||||
@ -745,9 +749,11 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_null($watched)) {
|
if (is_null($watched)) {
|
||||||
|
/*
|
||||||
if (!is_null($user)) {
|
if (!is_null($user)) {
|
||||||
$query_3 .= ' AND B.uId = '. $user;
|
$query_3 .= ' AND B.uId = '. $user;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
} else {
|
} else {
|
||||||
$arrWatch = $userservice->getWatchlist($user);
|
$arrWatch = $userservice->getWatchlist($user);
|
||||||
if (count($arrWatch) > 0) {
|
if (count($arrWatch) > 0) {
|
||||||
@ -763,20 +769,14 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$query_5 = '';
|
$query_5 = '';
|
||||||
if ($hash == null) {
|
|
||||||
$query_5.= ' GROUP BY B.bHash';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//Voting system
|
//Voting system
|
||||||
//needs to be directly after FROM bookmarks
|
//needs to be directly after FROM bookmarks
|
||||||
if ($GLOBALS['enableVoting'] && $userservice->isLoggedOn()) {
|
if ($GLOBALS['enableVoting'] && $userservice->isLoggedOn()) {
|
||||||
$cuid = $userservice->getCurrentUserId();
|
$cuid = $userservice->getCurrentUserId();
|
||||||
$vs = SemanticScuttle_Service_Factory::get('Vote');
|
$vs = SemanticScuttle_Service_Factory::get('Vote');
|
||||||
$query_1 .= ', !ISNULL(V.bId) as hasVoted, V.vote as vote';
|
$query_1 .= ', (select !ISNULL(bId) from '.$vs->getTableName().' where bId=B.bId and uId='.(int)$cuid.') as hasVoted, (select vote from '.$vs->getTableName().' where bId=B.bId and uId='.(int)$cuid.') as vote';
|
||||||
$query_2 .= ' LEFT JOIN ' . $vs->getTableName() . ' AS V'
|
|
||||||
. ' ON B.bId = V.bId'
|
|
||||||
. ' AND V.uId = ' . (int)$cuid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch($sortOrder) {
|
switch($sortOrder) {
|
||||||
@ -805,6 +805,11 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService
|
|||||||
$query_5 .= ' ORDER BY B.' . $GLOBALS['dateOrderField'] . ' DESC ';
|
$query_5 .= ' ORDER BY B.' . $GLOBALS['dateOrderField'] . ' DESC ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add GROUP BY only if tag is given
|
||||||
|
if ($tagcount > 0) {
|
||||||
|
$query_5 = ' GROUP BY B.bHash' . $query_5;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle the parts of the query that depend on any tags that are present.
|
// Handle the parts of the query that depend on any tags that are present.
|
||||||
$query_4 = '';
|
$query_4 = '';
|
||||||
for ($i = 0; $i < $tagcount; $i ++) {
|
for ($i = 0; $i < $tagcount; $i ++) {
|
||||||
@ -854,9 +859,9 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService
|
|||||||
$query_4 .= ' OR B.bPrivateNote LIKE "'
|
$query_4 .= ' OR B.bPrivateNote LIKE "'
|
||||||
. $this->db->sql_escape($aTerms[$i])
|
. $this->db->sql_escape($aTerms[$i])
|
||||||
.'%"';
|
.'%"';
|
||||||
$query_4 .= ' OR U.username = "'
|
$query_4 .= ' OR B.uId = (select '.$userservice->getFieldName('primary').' from '.$userservice->getTableName().' where '.$userservice->getFieldName('username').'="'
|
||||||
. $this->db->sql_escape($aTerms[$i])
|
. $this->db->sql_escape($aTerms[$i])
|
||||||
. '"'; //exact match for username
|
. '")';
|
||||||
if ($dotags) {
|
if ($dotags) {
|
||||||
$query_4 .= ' OR T.tag LIKE "'
|
$query_4 .= ' OR T.tag LIKE "'
|
||||||
. $this->db->sql_escape($aTerms[$i])
|
. $this->db->sql_escape($aTerms[$i])
|
||||||
|
Loading…
Reference in New Issue
Block a user