521 lines
19 KiB
PHP
521 lines
19 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
||
|
* This is NOT a freeware, use is subject to license terms
|
||
|
*
|
||
|
* $Id: table_common_member.php 31849 2012-10-17 04:39:16Z zhangguosheng $
|
||
|
*/
|
||
|
|
||
|
if(!defined('IN_DISCUZ')) {
|
||
|
exit('Access Denied');
|
||
|
}
|
||
|
|
||
|
class table_common_member extends discuz_table_archive
|
||
|
{
|
||
|
public function __construct() {
|
||
|
|
||
|
$this->_table = 'common_member';
|
||
|
$this->_pk = 'uid';
|
||
|
$this->_pre_cache_key = 'common_member_';
|
||
|
|
||
|
parent::__construct();
|
||
|
}
|
||
|
|
||
|
public function update_credits($uid, $credits) {
|
||
|
if($uid) {
|
||
|
$data = array('credits'=>intval($credits));
|
||
|
DB::update($this->_table, $data, array('uid' => intval($uid)), 'UNBUFFERED');
|
||
|
$this->update_cache($uid, $data);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function update_by_groupid($groupid, $data) {
|
||
|
$uids = array();
|
||
|
$groupid = dintval($groupid, true);
|
||
|
if($groupid && $this->_allowmem) {
|
||
|
$uids = array_keys($this->fetch_all_by_groupid($groupid));
|
||
|
}
|
||
|
if($groupid && !empty($data) && is_array($data)) {
|
||
|
DB::update($this->_table, $data, DB::field('groupid', $groupid), 'UNBUFFERED');
|
||
|
}
|
||
|
if($uids) {
|
||
|
$this->update_cache($uids, $data);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function increase($uids, $setarr) {
|
||
|
$uids = dintval((array)$uids, true);
|
||
|
$sql = array();
|
||
|
$allowkey = array('credits', 'newpm', 'newprompt');
|
||
|
foreach($setarr as $key => $value) {
|
||
|
if(($value = intval($value)) && in_array($key, $allowkey)) {
|
||
|
$sql[] = "`$key`=`$key`+'$value'";
|
||
|
}
|
||
|
}
|
||
|
if(!empty($sql)){
|
||
|
DB::query("UPDATE ".DB::table($this->_table)." SET ".implode(',', $sql)." WHERE uid IN (".dimplode($uids).")", 'UNBUFFERED');
|
||
|
$this->increase_cache($uids, $setarr);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function fetch_by_username($username, $fetch_archive = 0) {
|
||
|
$user = array();
|
||
|
if($username) {
|
||
|
$user = DB::fetch_first('SELECT * FROM %t WHERE username=%s', array($this->_table, $username));
|
||
|
if(isset($this->membersplit) && $fetch_archive && empty($user)) {
|
||
|
$user = C::t($this->_table.'_archive')->fetch_by_username($username, 0);
|
||
|
}
|
||
|
}
|
||
|
return $user;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_by_username($usernames, $fetch_archive = 1) {
|
||
|
$users = array();
|
||
|
if(!empty($usernames)) {
|
||
|
$users = DB::fetch_all('SELECT * FROM %t WHERE username IN (%n)', array($this->_table, (array)$usernames), 'username');
|
||
|
if(isset($this->membersplit) && $fetch_archive && count($usernames) !== count($users)) {
|
||
|
$users += C::t($this->_table.'_archive')->fetch_all_by_username($usernames, 0);
|
||
|
}
|
||
|
}
|
||
|
return $users;
|
||
|
}
|
||
|
|
||
|
public function fetch_uid_by_username($username, $fetch_archive = 0) {
|
||
|
$uid = 0;
|
||
|
if($username) {
|
||
|
$uid = DB::result_first('SELECT uid FROM %t WHERE username=%s', array($this->_table, $username));
|
||
|
if(isset($this->membersplit) && $fetch_archive && empty($uid)) {
|
||
|
$uid = C::t($this->_table.'_archive')->fetch_uid_by_username($username, 0);
|
||
|
}
|
||
|
}
|
||
|
return $uid;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_uid_by_username($usernames, $fetch_archive = 1) {
|
||
|
$uids = array();
|
||
|
if($usernames) {
|
||
|
foreach($this->fetch_all_by_username($usernames, $fetch_archive) as $username => $value) {
|
||
|
$uids[$username] = $value['uid'];
|
||
|
}
|
||
|
}
|
||
|
return $uids;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_by_adminid($adminids, $fetch_archive = 1) {
|
||
|
$users = array();
|
||
|
$adminids = dintval((array)$adminids, true);
|
||
|
if($adminids) {
|
||
|
$users = DB::fetch_all('SELECT * FROM %t WHERE adminid IN (%n) ORDER BY adminid, uid', array($this->_table, (array)$adminids), $this->_pk);
|
||
|
if(isset($this->membersplit) && $fetch_archive) {
|
||
|
$users += C::t($this->_table.'_archive')->fetch_all_by_adminid($adminids, 0);
|
||
|
}
|
||
|
}
|
||
|
return $users;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_username_by_uid($uids) {
|
||
|
$users = array();
|
||
|
if(($uids = dintval($uids, true))) {
|
||
|
foreach($this->fetch_all($uids) as $uid => $value) {
|
||
|
$users[$uid] = $value['username'];
|
||
|
}
|
||
|
}
|
||
|
return $users;
|
||
|
}
|
||
|
|
||
|
public function count_by_groupid($groupid) {
|
||
|
return $groupid ? DB::result_first('SELECT COUNT(*) FROM %t WHERE '.DB::field('groupid', $groupid), array($this->_table)) : 0;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_by_groupid($groupid, $start = 0, $limit = 0) {
|
||
|
$users = array();
|
||
|
if(($groupid = dintval($groupid, true))) {
|
||
|
$users = DB::fetch_all('SELECT * FROM '.DB::table($this->_table).' WHERE '.DB::field('groupid', $groupid).' '.DB::limit($start, $limit), null, 'uid');
|
||
|
}
|
||
|
return $users;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_groupid() {
|
||
|
return DB::fetch_all('SELECT DISTINCT(groupid) FROM '.DB::table($this->_table), null, 'groupid');
|
||
|
}
|
||
|
|
||
|
public function fetch_all_by_allowadmincp($val, $glue = '=') {
|
||
|
return DB::fetch_all('SELECT * FROM '.DB::table($this->_table).' WHERE '.DB::field('allowadmincp', intval($val), $glue), NULL, 'uid');
|
||
|
}
|
||
|
|
||
|
public function update_admincp_manage($uids) {
|
||
|
if(($uids = dintval($uids, true))) {
|
||
|
$data = DB::query('UPDATE '.DB::table($this->_table).' SET allowadmincp=allowadmincp | 1 WHERE uid IN ('.dimplode($uids).')');
|
||
|
$this->reset_cache($uids);
|
||
|
return $data;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public function clean_admincp_manage($uids) {
|
||
|
if(($uids = dintval($uids, true))) {
|
||
|
$data = DB::query('UPDATE '.DB::table($this->_table).' SET allowadmincp=allowadmincp & 0xFE WHERE uid IN ('.dimplode($uids).')');
|
||
|
$this->reset_cache($uids);
|
||
|
return $data;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_ban_by_groupexpiry($timestamp) {
|
||
|
return ($timestamp = intval($timestamp)) ? DB::fetch_all("SELECT uid, groupid, credits FROM ".DB::table($this->_table)." WHERE groupid IN ('4', '5') AND groupexpiry>'0' AND groupexpiry<'$timestamp'", array(), 'uid') : array();
|
||
|
}
|
||
|
|
||
|
public function count($fetch_archive = 1) {
|
||
|
$count = DB::result_first('SELECT COUNT(*) FROM %t', array($this->_table));
|
||
|
if(isset($this->membersplit) && $fetch_archive) {
|
||
|
$count += C::t($this->_table.'_archive')->count(0);
|
||
|
}
|
||
|
$count += intval(DB::result_first('SELECT COUNT(*) FROM '.DB::table('common_connect_guest'), null, true));
|
||
|
return $count;
|
||
|
}
|
||
|
|
||
|
public function fetch_by_email($email, $fetch_archive = 0) {
|
||
|
$user = array();
|
||
|
if($email) {
|
||
|
$user = DB::fetch_first('SELECT * FROM %t WHERE email=%s', array($this->_table, $email));
|
||
|
if(isset($this->membersplit) && $fetch_archive && empty($user)) {
|
||
|
$user = C::t($this->_table.'_archive')->fetch_by_email($email, 0);
|
||
|
}
|
||
|
}
|
||
|
return $user;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_by_email($emails, $fetch_archive = 1) {
|
||
|
$users = array();
|
||
|
if(!empty($emails)) {
|
||
|
$users = DB::fetch_all('SELECT * FROM %t WHERE %i', array($this->_table, DB::field('email', $emails)), 'email');
|
||
|
if(isset($this->membersplit) && $fetch_archive && count($emails) !== count($users)) {
|
||
|
$users += C::t($this->_table.'_archive')->fetch_all_by_email($emails, 0);
|
||
|
}
|
||
|
}
|
||
|
return $users;
|
||
|
}
|
||
|
|
||
|
public function count_by_email($email, $fetch_archive = 0) {
|
||
|
$count = 0;
|
||
|
if($email) {
|
||
|
$count = DB::result_first('SELECT COUNT(*) FROM %t WHERE email=%s', array($this->_table, $email));
|
||
|
if(isset($this->membersplit) && $fetch_archive) {
|
||
|
$count += C::t($this->_table.'_archive')->count_by_email($email, 0);
|
||
|
}
|
||
|
}
|
||
|
return $count;
|
||
|
}
|
||
|
|
||
|
public function fetch_all_by_like_username($username, $start = 0, $limit = 0) {
|
||
|
$data = array();
|
||
|
if($username) {
|
||
|
$data = DB::fetch_all('SELECT * FROM %t WHERE username LIKE %s'.DB::limit($start, $limit), array($this->_table, stripsearchkey($username).'%'), 'uid');
|
||
|
}
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
public function count_by_like_username($username) {
|
||
|
return !empty($username) ? DB::result_first('SELECT COUNT(*) FROM %t WHERE username LIKE %s', array($this->_table, stripsearchkey($username).'%')) : 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function fetch_runtime() {
|
||
|
return DB::result_first("SELECT (MAX(regdate)-MIN(regdate))/86400 AS runtime FROM ".DB::table($this->_table));
|
||
|
}
|
||
|
|
||
|
public function count_admins() {
|
||
|
return DB::result_first("SELECT COUNT(*) FROM ".DB::table($this->_table)." WHERE adminid<>'0' AND adminid<>'-1'");
|
||
|
}
|
||
|
|
||
|
public function count_by_regdate($timestamp) {
|
||
|
return DB::result_first('SELECT COUNT(*) FROM %t WHERE regdate>%d', array($this->_table, $timestamp));
|
||
|
}
|
||
|
|
||
|
public function fetch_all_stat_memberlist($username, $orderby = '', $sort = '', $start = 0, $limit = 0) {
|
||
|
$orderby = in_array($orderby, array('uid','credits','regdate', 'gender','username','posts','lastvisit'), true) ? $orderby : 'uid';
|
||
|
$sql = '';
|
||
|
|
||
|
$sql = !empty($username) ? " WHERE username LIKE '".addslashes(stripsearchkey($username))."%'" : '';
|
||
|
|
||
|
$memberlist = array();
|
||
|
$query = DB::query("SELECT m.uid, m.username, mp.gender, m.email, m.regdate, ms.lastvisit, mc.posts, m.credits
|
||
|
FROM ".DB::table($this->_table)." m
|
||
|
LEFT JOIN ".DB::table('common_member_profile')." mp ON mp.uid=m.uid
|
||
|
LEFT JOIN ".DB::table('common_member_status')." ms ON ms.uid=m.uid
|
||
|
LEFT JOIN ".DB::table('common_member_count')." mc ON mc.uid=m.uid
|
||
|
$sql ORDER BY ".DB::order($orderby, $sort).DB::limit($start, $limit));
|
||
|
while($member = DB::fetch($query)) {
|
||
|
$member['usernameenc'] = rawurlencode($member['username']);
|
||
|
$member['regdate'] = dgmdate($member['regdate']);
|
||
|
$member['lastvisit'] = dgmdate($member['lastvisit']);
|
||
|
$memberlist[$member['uid']] = $member;
|
||
|
}
|
||
|
return $memberlist;
|
||
|
}
|
||
|
|
||
|
public function delete_no_validate($uids) {
|
||
|
if(($uids = dintval($uids, true))) {
|
||
|
$delnum = $this->delete($uids);
|
||
|
C::t('common_member_field_forum')->delete($uids);
|
||
|
C::t('common_member_field_home')->delete($uids);
|
||
|
C::t('common_member_status')->delete($uids);
|
||
|
C::t('common_member_count')->delete($uids);
|
||
|
C::t('common_member_profile')->delete($uids);
|
||
|
C::t('common_member_validate')->delete($uids);
|
||
|
return $delnum;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public function insert($uid, $username, $password, $email, $ip, $groupid, $extdata, $adminid = 0) {
|
||
|
if(($uid = dintval($uid))) {
|
||
|
$credits = isset($extdata['credits']) ? $extdata['credits'] : array();
|
||
|
$profile = isset($extdata['profile']) ? $extdata['profile'] : array();
|
||
|
$profile['uid'] = $uid;
|
||
|
$base = array(
|
||
|
'uid' => $uid,
|
||
|
'username' => (string)$username,
|
||
|
'password' => (string)$password,
|
||
|
'email' => (string)$email,
|
||
|
'adminid' => intval($adminid),
|
||
|
'groupid' => intval($groupid),
|
||
|
'regdate' => TIMESTAMP,
|
||
|
'emailstatus' => intval($extdata['emailstatus']),
|
||
|
'credits' => dintval($credits[0]),
|
||
|
'timeoffset' => 9999
|
||
|
);
|
||
|
$status = array(
|
||
|
'uid' => $uid,
|
||
|
'regip' => (string)$ip,
|
||
|
'lastip' => (string)$ip,
|
||
|
'lastvisit' => TIMESTAMP,
|
||
|
'lastactivity' => TIMESTAMP,
|
||
|
'lastpost' => 0,
|
||
|
'lastsendmail' => 0
|
||
|
);
|
||
|
$count = array(
|
||
|
'uid' => $uid,
|
||
|
'extcredits1' => dintval($credits[1]),
|
||
|
'extcredits2' => dintval($credits[2]),
|
||
|
'extcredits3' => dintval($credits[3]),
|
||
|
'extcredits4' => dintval($credits[4]),
|
||
|
'extcredits5' => dintval($credits[5]),
|
||
|
'extcredits6' => dintval($credits[6]),
|
||
|
'extcredits7' => dintval($credits[7]),
|
||
|
'extcredits8' => dintval($credits[8])
|
||
|
);
|
||
|
$ext = array('uid' => $uid);
|
||
|
parent::insert($base, false, true);
|
||
|
C::t('common_member_status')->insert($status, false, true);
|
||
|
C::t('common_member_count')->insert($count, false, true);
|
||
|
C::t('common_member_profile')->insert($profile, false, true);
|
||
|
C::t('common_member_field_forum')->insert($ext, false, true);
|
||
|
C::t('common_member_field_home')->insert($ext, false, true);
|
||
|
manyoulog('user', $uid, 'add');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function delete($val, $unbuffered = false, $fetch_archive = 0) {
|
||
|
$ret = false;
|
||
|
if(($val = dintval($val, true))) {
|
||
|
$ret = parent::delete($val, $unbuffered, $fetch_archive);
|
||
|
if($this->_allowmem) {
|
||
|
$data = ($data = memory('get', 'deleteuids')) === false ? array() : $data;
|
||
|
foreach((array)$val as $uid) {
|
||
|
$data[$uid] = $uid;
|
||
|
}
|
||
|
memory('set', 'deleteuids', $data, 86400*2);
|
||
|
}
|
||
|
}
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
public function count_zombie() {
|
||
|
$dateline = TIMESTAMP - 7776000;//60*60*24*90
|
||
|
return DB::result_first('SELECT count(*) FROM %t mc, %t ms WHERE mc.posts<5 AND ms.lastvisit<%d AND ms.uid=mc.uid', array('common_member_count', 'common_member_status', $dateline));
|
||
|
}
|
||
|
|
||
|
public function split($splitnum, $iscron = false) {
|
||
|
loadcache('membersplitdata');
|
||
|
@set_time_limit(0);
|
||
|
discuz_database_safecheck::setconfigstatus(0);
|
||
|
$dateline = TIMESTAMP - 7776000;//60*60*24*90
|
||
|
$temptablename = DB::table('common_member_temp___');
|
||
|
if(!DB::fetch_first("SHOW TABLES LIKE '$temptablename'")) {
|
||
|
DB::query("CREATE TABLE $temptablename (`uid` int(10) NOT NULL DEFAULT 0,PRIMARY KEY (`uid`)) ENGINE=MYISAM;");
|
||
|
}
|
||
|
$splitnum = max(1, intval($splitnum));
|
||
|
if(!DB::result_first('SELECT COUNT(*) FROM '.$temptablename)) {
|
||
|
DB::query('INSERT INTO '.$temptablename.' (`uid`) SELECT ms.uid AS uid FROM %t mc, %t ms WHERE mc.posts<5 AND ms.lastvisit<%d AND mc.uid=ms.uid ORDER BY ms.lastvisit LIMIT %d', array('common_member_count', 'common_member_status', $dateline, $splitnum));
|
||
|
}
|
||
|
|
||
|
if(DB::result_first('SELECT COUNT(*) FROM '.$temptablename)) {
|
||
|
|
||
|
|
||
|
if(!$iscron && getglobal('setting/memberspliting') === null) {
|
||
|
$this->switch_keys('disable');
|
||
|
}
|
||
|
$uidlist = DB::fetch_all('SELECT uid FROM '.$temptablename, null, 'uid');
|
||
|
$uids = dimplode(array_keys($uidlist));
|
||
|
$movesql = 'REPLACE INTO %t SELECT * FROM %t WHERE uid IN ('.$uids.')';
|
||
|
$deletesql = 'DELETE FROM %t WHERE uid IN ('.$uids.')';
|
||
|
if(DB::query($movesql, array('common_member_archive', 'common_member'), false, true)) {
|
||
|
DB::query($deletesql, array('common_member'), false, true);
|
||
|
}
|
||
|
if(DB::query($movesql, array('common_member_profile_archive', 'common_member_profile'), false, true)) {
|
||
|
DB::query($deletesql, array('common_member_profile'), false, true);
|
||
|
}
|
||
|
if(DB::query($movesql, array('common_member_field_forum_archive', 'common_member_field_forum'), false, true)) {
|
||
|
DB::query($deletesql, array('common_member_field_forum'), false, true);
|
||
|
}
|
||
|
if(DB::query($movesql, array('common_member_field_home_archive', 'common_member_field_home'), false, true)) {
|
||
|
DB::query($deletesql, array('common_member_field_home'), false, true);
|
||
|
}
|
||
|
if(DB::query($movesql, array('common_member_status_archive', 'common_member_status'), false, true)) {
|
||
|
DB::query($deletesql, array('common_member_status'), false, true);
|
||
|
}
|
||
|
if(DB::query($movesql, array('common_member_count_archive', 'common_member_count'), false, true)) {
|
||
|
DB::query($deletesql, array('common_member_count'), false, true);
|
||
|
}
|
||
|
|
||
|
DB::query('DROP TABLE '.$temptablename);
|
||
|
$membersplitdata = getglobal('cache/membersplitdata');
|
||
|
$zombiecount = $membersplitdata['zombiecount'] - $splitnum;
|
||
|
if($zombiecount < 0) {
|
||
|
$zombiecount = 0;
|
||
|
}
|
||
|
savecache('membersplitdata', array('membercount' => $membersplitdata['membercount'], 'zombiecount' => $zombiecount, 'dateline' => TIMESTAMP));
|
||
|
C::t('common_setting')->delete('memberspliting');
|
||
|
return true;
|
||
|
} else {
|
||
|
DB::query('DROP TABLE '.$temptablename);
|
||
|
if(!$iscron) {
|
||
|
$this->switch_keys('enable');
|
||
|
C::t('common_member_profile')->optimize();
|
||
|
C::t('common_member_field_forum')->optimize();
|
||
|
C::t('common_member_field_home')->optimize();
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function switch_keys($type) {
|
||
|
if($type === 'disable') {
|
||
|
$type = 'DISABLE';
|
||
|
C::t('common_setting')->update_batch(array('memberspliting'=>1, 'membersplit'=>1));
|
||
|
} else {
|
||
|
$type = 'ENABLE';
|
||
|
C::t('common_setting')->delete('memberspliting');
|
||
|
}
|
||
|
|
||
|
require_once libfile('function/cache');
|
||
|
updatecache('setting');
|
||
|
}
|
||
|
|
||
|
public function count_by_credits($credits) {
|
||
|
return DB::result_first('SELECT COUNT(*) FROM %t WHERE credits>%d', array($this->_table, $credits));
|
||
|
}
|
||
|
|
||
|
public function fetch_all_for_spacecp_search($wherearr, $fromarr, $start = 0, $limit = 100) {
|
||
|
if(!$start && !$limit) {
|
||
|
$start = 100;
|
||
|
}
|
||
|
if(!$wherearr) {
|
||
|
$wherearr[] = '1';
|
||
|
}
|
||
|
if(!$fromarr) {
|
||
|
$fromarr[] = DB::table($this->_table);
|
||
|
}
|
||
|
return DB::fetch_all("SELECT s.* FROM ".implode(',', $fromarr)." WHERE ".implode(' AND ', $wherearr).DB::limit($start, $limit));
|
||
|
}
|
||
|
|
||
|
public function fetch_all_girls_for_ranklist($offset = 0, $limit = 20, $orderby = 'ORDER BY s.unitprice DESC, s.credit DESC') {
|
||
|
$members = array();
|
||
|
$query = DB::query("SELECT m.uid, m.username, mc.*, mp.gender
|
||
|
FROM ".DB::table('common_member')." m
|
||
|
LEFT JOIN ".DB::table('home_show')." s ON s.uid=m.uid
|
||
|
LEFT JOIN ".DB::table('common_member_profile')." mp ON mp.uid=m.uid
|
||
|
LEFT JOIN ".DB::table('common_member_count')." mc ON mc.uid=m.uid
|
||
|
WHERE mp.gender='2'
|
||
|
ORDER BY $orderby
|
||
|
LIMIT $offset, $limit");
|
||
|
while($member = DB::fetch($query)) {
|
||
|
$member['avatar'] = avatar($member['uid'], 'small');
|
||
|
$members[] = $member;
|
||
|
}
|
||
|
return $members;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function fetch_all_order_by_credit_for_ranklist($num, $orderby) {
|
||
|
$data = array();
|
||
|
if(!($num = intval($num))) {
|
||
|
return $data;
|
||
|
}
|
||
|
if($orderby === 'all') {
|
||
|
$sql = "SELECT m.uid,m.username,m.videophotostatus,m.groupid,m.credits,field.spacenote FROM ".DB::table('common_member')." m
|
||
|
LEFT JOIN ".DB::table('common_member_field_home')." field ON field.uid=m.uid
|
||
|
ORDER BY m.credits DESC LIMIT 0, $num";
|
||
|
} else {
|
||
|
$orderby = intval($orderby);
|
||
|
$orderby = in_array($orderby, array(1, 2, 3, 4, 5, 6, 7, 8)) ? $orderby : 1;
|
||
|
$sql = "SELECT m.uid,m.username,m.videophotostatus,m.groupid, mc.extcredits$orderby AS extcredits
|
||
|
FROM ".DB::table('common_member')." m
|
||
|
LEFT JOIN ".DB::table('common_member_count')." mc ON mc.uid=m.uid WHERE mc.extcredits$orderby>0
|
||
|
ORDER BY extcredits$orderby DESC LIMIT 0, $num";
|
||
|
}
|
||
|
|
||
|
$query = DB::query($sql);
|
||
|
while($result = DB::fetch($query)) {
|
||
|
$data[] = $result;
|
||
|
}
|
||
|
|
||
|
return $data;
|
||
|
|
||
|
}
|
||
|
|
||
|
public function fetch_all_order_by_friendnum_for_ranklist($num) {
|
||
|
|
||
|
$num = intval($num);
|
||
|
$num = $num ? $num : 20;
|
||
|
$data = $users = $oldorder = array();
|
||
|
$query = DB::query('SELECT uid, friends FROM '.DB::table('common_member_count').' WHERE friends>0 ORDER BY friends DESC LIMIT '.$num);
|
||
|
while($user = DB::fetch($query)) {
|
||
|
$users[$user['uid']] = $user;
|
||
|
$oldorder[] = $user['uid'];
|
||
|
}
|
||
|
$uids = array_keys($users);
|
||
|
if($uids) {
|
||
|
$query = DB::query('SELECT m.uid, m.username, m.videophotostatus, m.groupid, field.spacenote
|
||
|
FROM '.DB::table('common_member')." m
|
||
|
LEFT JOIN ".DB::table('common_member_field_home')." field ON m.uid=field.uid
|
||
|
WHERE m.uid IN (".dimplode($uids).")");
|
||
|
while($value = DB::fetch($query)) {
|
||
|
$users[$value['uid']] = array_merge($users[$value['uid']], $value);
|
||
|
}
|
||
|
|
||
|
foreach($oldorder as $uid) {
|
||
|
$data[] = $users[$uid];
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return $data;
|
||
|
|
||
|
}
|
||
|
|
||
|
public function max_uid() {
|
||
|
return DB::result_first('SELECT MAX(uid) FROM %t', array($this->_table));
|
||
|
}
|
||
|
|
||
|
public function range_by_uid($from, $limit) {
|
||
|
return DB::fetch_all('SELECT * FROM %t WHERE uid >= %d ORDER BY uid LIMIT %d', array($this->_table, $from, $limit), $this->_pk);
|
||
|
}
|
||
|
|
||
|
public function update_groupid_by_groupid($source, $target) {
|
||
|
return DB::query('UPDATE %t SET groupid=%d WHERE adminid <= 0 AND groupid=%d', array($this->_table, $target, $source));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|