[Help] SQL Job

Wikko0

Well-Known Member
Joined
Oct 17, 2012
Messages
660
Reaction score
263
Здравейте потребители на DarksTeam.
Искам да попитам, как да си направя автоматична система за раздаване на кредити. Така иска ми е следния - на 3-те играча, които са с най-много точни в BC/DS за една седмица, да им бъде добавено 500 кредита примерно за първия, 300 за втория и 150 за третия и след като направи тази процедура да чисти всичките точки.

Ако може да ми направите такъв SQLJob или да ме насочите към подобни скриптчета.
 
Можеш и с php да го направиш : ) Просто направи някъде поле където ще се записва времето,а в сайта една функция която ще се изпълнява когато настъпи този момент и ще селектира първите 3ма от бц и дс и ще им дава кредити следователно с update или insert, след което с update ще занулиш двете таблици и ще update-неш времето с +7 дни ;). Успех!
 
  • Like
Reactions: Wikko0
Имали начин някой това да ми го даде ,защото нямам никакви познания по PHP. В доста сървъри го има, нямали го някъде релийзнато ?
 
Начин има ако някой ти го напише предполагам.. тъй като аз не съм срещал такъв код. :)
 
  • Like
Reactions: Wikko0
След няколко часа ще едитна този коментар с код-а който търсиш (просто имам малко работа в момента)
Едит 1 - кажи само имената на таблиците където ти се запазват класациите
 
Last edited:
  • Like
Reactions: Wikko0 and w0lf11
А в коя датабаза са ?
И ако може да кажеш и имената на колоните в таблиците EVENT_INFO и EVENT_INFO_BC много ще ми помогнеш (интересува ме само името на колоната за акаунта и точките)
 
  • Like
Reactions: Wikko0
Database мисля че не ти трябва : ), а колкото до колоните му...

CharacterName и Point

Успех и само нагоре!
 
  • Like
Reactions: Wikko0
Database мисля че не ти трябва : ), а колкото до колоните му...

CharacterName и Point

Успех и само нагоре!
Да разбирам че тези таблици се намират в датабазата MuOnline?
 
  • Like
Reactions: Wikko0
Да разбирам че тези таблици се намират в датабазата MuOnline?

Да ;) Благодаря предварително ;)
 
Трябва да се направи и за Sky Event Database- MuOnline
 
След няколко часа Ще се прибера и едитна тоя пост с всичко
 
PHP:
 <?php
$date=date('j');
if($date == 1){
$mesec=mssql_fetch_array(mssql_query("SELECT * FROM Rewards"));
$mesecsega=date('n');
if($mesecsega > $mesec[Mesec]){
//DS event
$rewardDS=array(1=>500,2=>350,3=>150);
$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
}
}
?>
И това в query
Code:
CREATE TABLE [dbo].[Rewards](
	[Mesec] [int] NOT NULL
) ON [PRIMARY]

GO
Edit : В таблицата Rewards си добави още 1-2 колонки с примерно име MesecBC,MesecSky и едитвай тях при следващите проверки
Едит 2 : Не съм го тествал, но би трябвало да работи :)
 
Last edited:
  • Like
Reactions: Angerfist
PHP:
 <?php
$date=date('j');
if($date == 1){
$mesec=mssql_fetch_array(mssql_query("SELECT * FROM Rewards"));
$mesecsega=date('n');
if($mesecsega > $mesec[Mesec]){
//DS event
$rewardDS=array(1=>500,2=>350,3=>150);
$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
}
}
?>
И това в query
Code:
CREATE TABLE [dbo].[Rewards](
	[Mesec] [int] NOT NULL
) ON [PRIMARY]

GO
Edit : В таблицата Rewards си добави още 1-2 колонки с примерно име MesecBC,MesecSky и едитвай тях при следващите проверки
Едит 2 : Не съм го тествал, но би трябвало да работи :)
Велик си братле много ти благодаря :)
 
PHP:
 <?php
$date=date('j');
if($date == 1){
$mesec=mssql_fetch_array(mssql_query("SELECT * FROM Rewards"));
$mesecsega=date('n');
if($mesecsega > $mesec[Mesec]){
//DS event
$rewardDS=array(1=>500,2=>350,3=>150);
$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
}
}
?>
И това в query
Code:
CREATE TABLE [dbo].[Rewards](
	[Mesec] [int] NOT NULL
) ON [PRIMARY]

GO
Edit : В таблицата Rewards си добави още 1-2 колонки с примерно име MesecBC,MesecSky и едитвай тях при следващите проверки
Едит 2 : Не съм го тествал, но би трябвало да работи :)

Евала!
 
Да попитам само аз това къде трябва да го сложа, че да проработи (think)
 
запиши го в 1 .php файл и го include-ни в index.php. Цялото това се изпалнява само на първо число така че няма да бави сайта
Edit : утре сутринта ще ви дам и варианта за всяка седмица
 
Last edited:
Аз по си го представям така:

следното си го слагате където искате... 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, вие си го направете както ще ви е удобно... И аз нямах възможност да го пробвам!