[Help] SQL Job

Аз по си го представям така:

следното си го слагате където искате... config, някой файл който се извиква в header и т.н., файл с функции и пр.
PHP:
function update_rankings($time){
	$rewards = array (1 => '500', 2 => '300', 3 => '100');
	$newtime = time() + (7 * 24 * 60 * 60);
	prepare("SELECT COUNT(*) as count FROM Rewards WHERE nextTime <= '".$time."' ");
	$result = fetch(PDO::FETCH_ASSOC);
	if($result['count'] == 1){
		prepare("SELECT TOP 3 AccountID FROM EVENT_INFO ORDER BY Point DESC");
		while($characters = fetch(PDO::FETCH_ASSOC)){
			$i++;
			prepare("UPDATE MEMB_CREDITS SET Credits = credits+'".$rewards[$i]."' WHERE memb___id='".$characters['AccountID']."'");	
		}
		prepare("UPDATE EVENT_INFO SET Point = '0'");
		prepare("UPDATE Rewards SET nextTime = '".$newtime."' ");
	}
}

в своя header:
PHP:
update_rankings(time());

и въпросното в query:
Code:
CREATE TABLE [dbo].[Rewards](
	[nextTime] [int] NOT NULL
) ON [PRIMARY]

GO

P.S. Написал съм го така, защото използвам PDO, вие си го направете както ще ви е удобно... И аз нямах възможност да го пробвам!
Така също би трябвало да стане. Утре ще ви дам и друг вариант
Edit : feature21 за твоя код според мен когато ще дава кредити за награда няма да работи както трябва защото първата стойност на $i ще е 0 , а $rewards започва от 1. Според мен трябва да е така :
PHP:
prepare("UPDATE MEMB_CREDITS SET Credits = credits+'".$rewards[$i+1]."' WHERE memb___id='".$characters['AccountID']."'");
Edit2 : няма да работи защото в таблицата EVENT_INFO записва името на героя, а не акаунта както ти си го написал. Трябва се добави още една завка към AccountCharacter за да вземеш акаунта
Edit 3 : Ето и моя вариант за седмици (изпълнява се само в понеделник) Ако искате да промените деня използвайте Mon,Sun....
PHP:
<?php
$rewardDS=array(1=>500,2=>350,3=>150);
$den=date('D');
if($den == 'Mon'){//Vseki ponedelnik
$newtime=time()+(7*24*60*60);   
$sedmica=mssql_num_rows(mssql_query("SELECT * FROM Rewards WHERE nextTime <= '$time'"));
if($sedmica == 1){
//DS event
$query=mssql_query("SELECT TOP 3 * FROM EVENT_INFO order by CharacterName desc");
for($i=0;$i < mssql_num_rows($query);++$i)
{
$DScredits=$rewardDS[$i+1];
$ds=mssql_fetch_array($query);
$dsacc=mssql_fetch_row(mssql_query("SELECT Id FROM AccountCharacter WHERE GameID1='$ds[CharacterName]' or GameID2='$ds[CharacterName]' or GameID3='$ds[CharacterName]' or GameID4='$ds[CharacterName]' or GameID5='$ds[CharacterName]'"));
mssql_query("UPDATE MEMB_CREDITS SET credits=credits+'$DScredits' WHERE memb___id='$dsacc[0]'");
if($i==2){
mssql_query("UPDATE EVENT_INFO SET Point='0'");
mssql_query("UPDATE Rewards SET Mesec=Mesec+1");
}
}
//END OF DS

//Sa6toto i za BC samo smeni imenata na tablicite i promenlivite
}
}
?>
Code:
CREATE TABLE [dbo].[Rewards](
	[nextTime] [int] NOT NULL
) ON [PRIMARY]

GO
 
Last edited:
Добре неможе ли да се направи процедура в сял... По лесно ще стане :)
 
Имам един въпрос. Как да го сложа това? Слагам го уж ама ми дава проблем, че няма table Rewards
 
Имам един въпрос. Как да го сложа това? Слагам го уж ама ми дава проблем, че няма table Rewards
А да ти е хрумвало, че евентуално нямаш таблица Rewards? :D
 
Има такава таблица в датабазата на MuOnline. Инклудвам "ds.php" в config.php[include("ds.php")] и ми дава следния проблем.
Warning: mssql_query() [function.mssql-query]: message: Invalid object name 'Rewards'. (severity 16) in D:\xampp\htdocs\ds.php on line 6

Warning: mssql_query() [function.mssql-query]: Query failed in D:\xampp\htdocs\ds.php on line 6

Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in D:\xampp\htdocs\ds.php on line 6
 
pafa7a помогни ни приятел моля те :)
 
Инклуднете ds.php в края на config.php.
 
Здрасти имам проблем с на pafa7a модулчето.Значи занулява резултатите всяка седмица,но не дава награди на първите 3ма.Някой може ли да го фиксне.Благодаря!
<?php
$dbhost = '127.0.0.1';
$dbuser = 'sa'; // По подразбиране 'sa'
$dbase = 'MuOnline'; // База от данни MuOnlinebasi tapacite mse ;D
$dbpass = '****'; // Mssql server парола
$serverport = '559010' ; // GameServer порт по подразбиране 55901
$sql_connect = mssql_connect($dbhost, $dbuser, $dbpass) or die('Can\'t connect to mssql server!' . mssql_get_last_message()); // Не пипайте тук!
mssql_select_db($dbase, $sql_connect) or die('Can\'t connect to mssql database!' . mssql_get_last_message()); // Тук също!

$rewardDS=array(1=>800,2=>550,3=>350);
$den=date('D');

if($den == 'Mon'){ //Vseki ponedelnik
$newtime=time()+(7*24*60*60);
$time=time();
$sedmica=mssql_num_rows(mssql_query("SELECT * FROM Rewards WHERE nextTime <= '$time'"));

if($sedmica == 1){

$query=mssql_query("SELECT TOP 3 * FROM EVENT_INFO order by CharacterName desc");
for($i=0;$i < mssql_num_rows($query);++$i)
{
$DScredits=$rewardDS[$i+1];
$ds=mssql_fetch_array($query);
$dsacc=mssql_fetch_row(mssql_query("SELECT Id FROM AccountCharacter WHERE GameID1='$ds[CharacterName]' or GameID2='$ds[CharacterName]' or GameID3='$ds[CharacterName]' or GameID4='$ds[CharacterName]' or GameID5='$ds[CharacterName]'"));
mssql_query("UPDATE MEMB_CREDITS SET credits=credits+'$DScredits' WHERE memb___id='$dsacc[0]'");
if($i==2){
mssql_query("UPDATE EVENT_INFO SET Point='0'");
mssql_query("UPDATE Rewards SET nextTime='$newtime'");
mssql_query("UPDATE Rewards SET MesecD=MesecD+1");
}
}
}
}
?>
 
ds.php примерно ;)
PHP:
<?php
function update_rankings($time){
	$day = date('N');
	$rewards = array (
		1 => '500', // Първо място
		2 => '300', // Второ място
		3 => '100' // Трето място
	);
	$newtime = time() + (7 * 24 * 60 * 60);
	if($day == 1){ // 1 => Понеделник, 2 => Вторник и т.н. до 7 => Неделя.
		$statement = $dbh->prepare("SELECT COUNT(*) as count FROM Rewards WHERE nextTime <= '".$time."' ");
		$statement->execute();
		$result = $statement->fetch(PDO::FETCH_ASSOC);
			if($result['count'] == 1){
				$statement = $dbh->prepare("SELECT TOP 3 AccountID FROM EVENT_INFO ORDER BY Point DESC");
				$statement->execute();
				while($characters = $statement->fetch(PDO::FETCH_ASSOC)){
					$i++;
					$statement = $dbh->prepare("UPDATE MEMB_CREDITS SET Credits = Credits+'".$rewards[$i]."' WHERE memb___id='".$characters['AccountID']."'");   
					$statement->execute();
				}
				$statement = $dbh->prepare("UPDATE EVENT_INFO SET Point = '0'");
				$statement->execute();
				$statement = $dbh->prepare("UPDATE Rewards SET nextTime = '".$newtime."' ");
				$statement->execute();
			}
	}
}
?>

header.php или нещо което се зарежда на всяка страница!
PHP:
update_rankings(time());

query:
PHP:
CREATE TABLE [dbo].[Rewards](
	[nextTime] [int] NOT NULL
) ON [PRIMARY]

GO

P.S. Написал съм го така, защото използвам PDO, вие си го направете както ще ви е удобно... за пример където е prepare - mssql_query, fetch - mssql_fetch_assoc; Успех! Ако има проблем... тук или на лс!
 
  • Like
Reactions: Wikko0 and pafa7a
<?php
function update_rankings($time){
$day = date('N');
$rewards = array (
1 => '500', // Първо място
2 => '300', // Второ място
3 => '100' // Трето място
);
$newtime = time() + (7 * 24 * 60 * 60);
if($day == 1){ // 1 => Понеделник, 2 => Вторник и т.н. до 7 => Неделя.
$statement = $dbh->prepare("SELECT COUNT(*) as count FROM Rewards WHERE nextTime <= '".$time."' ");
$statement->execute();
$result = $statement->fetch(PDO::FETCH_ASSOC);
if($result['count'] == 1){
$statement = $dbh->prepare("SELECT TOP 3 AccountID FROM EVENT_INFO ORDER BY Point DESC");
$statement->execute();
while($characters = $statement->fetch(PDO::FETCH_ASSOC)){
$i++;
$statement = $dbh->prepare("UPDATE MEMB_CREDITS SET Credits = Credits+'".$rewards[$i]."' WHERE memb___id='".$characters['AccountID']."'");
$statement->execute();
}
$statement = $dbh->prepare("UPDATE EVENT_INFO SET Point = '0'");
$statement->execute();
$statement = $dbh->prepare("UPDATE Rewards SET nextTime = '".$newtime."' ");
$statement->execute();
}
}
}
?>
Някой да ми го направи с mssql_query или там каквото е ; )

ТHANKS
 
Някой да ми го направи с mssql_query или там каквото е ; )

ТHANKS

PHP:
<?php
function update_rankings($time){
$day = date('N');
$rewards = array (
1 => '500', // Първо място
2 => '300', // Второ място
3 => '100' // Трето място
);
$newtime = time() + (7 * 24 * 60 * 60);
if($day == 1){ // 1 => Понеделник, 2 => Вторник и т.н. до 7 => Неделя.
$result = mssql_num_rows(mssql_query("SELECT * FROM Rewards WHERE nextTime <= '".$time."' "));
if($result == 1){
$statement = mssql_fetch_array(mssql_query("SELECT TOP 3 AccountID FROM EVENT_INFO ORDER BY Point DESC"));
while($characters = $statement['AccountID']){
$i++;
mssql_query("UPDATE MEMB_CREDITS SET Credits = Credits+'".$rewards[$i]."' WHERE memb___id='".$statement['AccountID']."'");
}
mssql_query("UPDATE EVENT_INFO SET Point = '0'");
mssql_query("UPDATE Rewards SET nextTime = '".$newtime."' ");
}
}
}
?>
Edit : не е тествано, написах го тука
 
Last edited:
Момчета а за боксове +5 +4 +3 +2 +1 има ли вариант да ги адва автоматично в сандъка на играчите благодаря предварително и да се реска online time класацията всяка неделя в 00:00
 
има вариант винаги : ) Въпроса е дали някой ще го направи.
 
Ами надявам се благодаря предварително
 
PHP:
<?php
function update_rankings($time){
$day = date('N');
$rewards = array (
1 => '500', // Първо място
2 => '300', // Второ място
3 => '100' // Трето място
);
$newtime = time() + (7 * 24 * 60 * 60);
if($day == 1){ // 1 => Понеделник, 2 => Вторник и т.н. до 7 => Неделя.
$result = mssql_num_rows(mssql_query("SELECT * FROM Rewards WHERE nextTime <= '".$time."' "));
if($result == 1){
$statement = mssql_fetch_array(mssql_query("SELECT TOP 3 AccountID FROM EVENT_INFO ORDER BY Point DESC"));
while($characters = $statement['AccountID']){
$i++;
mssql_query("UPDATE MEMB_CREDITS SET Credits = Credits+'".$rewards[$i]."' WHERE memb___id='".$statement['AccountID']."'");
}
mssql_query("UPDATE EVENT_INFO SET Point = '0'");
mssql_query("UPDATE Rewards SET nextTime = '".$newtime."' ");
}
}
}
?>
Edit : не е тествано, написах го тука
Това не работи, може ли да го оправиш : –)
update_rankings(time()); слагам това в header.php и след като дойде понеделник, нито се рестартират класациите, нито се дават награди, нито дава някаква грешка в сайта ; )