What's new

Account Maker Dziwny system zapyta? do bazy danych w nowym gesiorze

Status
Not open for further replies.

Dubler

Lua Factory =)
Joined
Apr 8, 2009
Messages
1,874
Reaction score
112
Jak doda? w gesiorze jakie? dodatkowe atrybuty warunku typu WHERE `group` < 5 do zapyta? np w highscores?
 

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

Po co cie to jak masz wszystko w configu?
$config['site']['groups_hidden'] = array(4, 5, 6);
$config['site']['accounts_hidden'] = array(1);
 

Dubler

Lua Factory =)
Joined
Apr 8, 2009
Messages
1,874
Reaction score
112
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

to by? przyk?ad. Chce wiedzie? na przysz?o??...
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
202
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

W G?siorze, przynajmniej tym co znalaz?em, wystarczy dopisa? do zapytania...

Poka? jak?? linijk?
 

Dubler

Lua Factory =)
Joined
Apr 8, 2009
Messages
1,874
Reaction score
112
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

Code:
	public function loadSkill()

	{

		$this->setClass('Highscore');

		$this->addOrder(new SQL_Order(new SQL_Field('value', 'player_skills'), SQL_Order::DESC));

		$this->addOrder(new SQL_Order(new SQL_Field('count', 'player_skills'), SQL_Order::DESC));

		$this->addExtraField(new SQL_Field('count', 'player_skills'));

		$this->addExtraField(new SQL_Field('value', 'player_skills'));

		$this->addExtraField(new SQL_Field('flag', 'accounts'));

		$filterWorld = new SQL_Filter(new SQL_Field('world_id', 'players'), SQL_Filter::EQUAL, $this->worldId);

		$filterPlayer = new SQL_Filter(new SQL_Field('id', 'players'), SQL_Filter::EQUAL, new SQL_Field('player_id', 'player_skills'));

		$filterSkill = new SQL_Filter(new SQL_Field('skillid', 'player_skills'), SQL_Filter::EQUAL, $this->skillType);

		$filter = new SQL_Filter($filterPlayer, SQL_Filter::CRITERIUM_AND, $filterSkill);



		if($this->highscoreConfig->isSetKey('groups_hidden'))

			foreach($this->highscoreConfig->getValue('groups_hidden') as $_group_filter)

				$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('group_id', 'players'), SQL_Filter::NOT_EQUAL, $_group_filter), SQL_Filter::CRITERIUM_AND, $filter);



		if($this->highscoreConfig->isSetKey('accounts_hidden'))

			foreach($this->highscoreConfig->getValue('accounts_hidden') as $_account_filter)

				$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('account_id', 'players'), SQL_Filter::NOT_EQUAL, $_account_filter), SQL_Filter::CRITERIUM_AND, $filter);



		if($this->vocation != '')

			$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('vocation', 'players'), SQL_Filter::EQUAL, $this->vocation), SQL_Filter::CRITERIUM_AND, $filter);



		$filter = new SQL_Filter($filterWorld, SQL_Filter::CRITERIUM_AND, $filter);

		$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('account_id', 'players'), SQL_Filter::EQUAL, new SQL_Field('id', 'accounts')), SQL_Filter::CRITERIUM_AND, $filter);

		$this->setFilter($filter);

	}
 

Matt

Banned
Joined
May 9, 2013
Messages
595
Reaction score
46
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

WHERE `group` < 5 AND `level`>20
lub OR.
 

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

@up
WTF?
 

Matt

Banned
Joined
May 9, 2013
Messages
595
Reaction score
46
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

Zapytanie zwr?ci wszystkich graczy, kt?rzy maj? group mniejsze od 5 ORAZ level wi?kszy od 20.
A jakby by?o np. WHERE `group`<5 OR `level`>20, to by zwr?ci?o graczy z group mniejszym od 5 LUB poziomem wi?kszym od 20.
Czyli ten drugi zwr?ci?by GameMastera, czy kogo? tam z group == 5 i poziomem 100.
AND i OR to to samo jak w lua and i or.
 

vRaa

Active User
Joined
Jun 22, 2013
Messages
96
Reaction score
4
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

A tu np. masz na graczy kt?rzy maj? warto?? storage 1 od id 2000:
select * from player where id in(select player_id from players_storage where key = 2000 and value = 1);
Wystarczy zna? podstawy mysqla.

#up
Jeden znak r?wno?ci, nie dwa.
 
Last edited:

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

Kurwa czlowieku ja to rozumiem bo nei takie bzdetne zapytania do bazy sobie ukladalem jak potrzebowalem, ale powiedz mi jaki to ma zwiazek z tym tematem?
 

vRaa

Active User
Joined
Jun 22, 2013
Messages
96
Reaction score
4
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

#up
"Jak doda? w gesiorze jakie? dodatkowe atrybuty warunku typu WHERE `group` < 5 "

Z tego co pami?tam gesior obiektowo pisany jest, tak wi?c wszystko znajdziesz w folderze pot.
 

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

Raz, ze to nie ja szukam rozwiazania jakiegos problemu wiec nie do konca wiem o co chodzi autorowi. Ja nawet nie zagladalem na dluzej niz 3 minuty do tego acc i nie uzywam go.
Dwa, ze jak juz zajzalem na chwile to nie ma tam nawet folderu pot - w starszej wersji jest, wiec chyba jednak troche nie na temat.
Trzy, pisalem do matta ktory z dupy podal jak wyglada normalnie zapytanie a nie powiedzial co i gdzie edytowac w nowym gesiorze... Czyli pisze nie na temat, bo podstawy zamych zapytan ogarnia kazdy kto pisal w tym temacie. Zastanawiam sie jak zwykle zapytania bazodanowe chcecie dodac chcoiazby gdzies do classes/highscores.php, gdzie wszystko jest napisane inaczej...
Zreszta wyjebane tam w kogos kto nawet nie wie o co chodzi ;< Nie pomoge w temacie bo aac nie znam nowego, wiec wylaczam sie z dyskusji.

@down
Tak, na tym sie opiera, ale nie ma nigdzie zwyklych zapytan i o tym wlasnie jest temat, bo w starym acc wchodzisz w highscores i masz zapytania ktore mozesz edytowac. W nowym wchodzisz, dupa, wchodzisz w classes i w highscores i dupa bo jest cos innego. A zapytania sa gdzie? Nie ma.
Btw. Folderu libs tez nigdzie nie widze xD Miales chociaz w rekach kiedys tego acc czy tak sie tylko madrujesz bo jest fajnie?
 
Last edited:

vRaa

Active User
Joined
Jun 22, 2013
Messages
96
Reaction score
4
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

Zacznijmy od tego, ?e nikt nie wie o co dok?adniej chodzi?o autorowi tematu.
A wracaj?c do niego.. to w nowszych wersjach znajduje si? to bodaj?e w folderze "libs/pot".
I tam w?a?nie mo?na doda? "zwykle zapytania bazodanowe".[Bo przecie? wszystko na tym si? opiera]
 

Gesior.pl

Ten G?sior
Joined
Apr 23, 2008
Messages
88
Reaction score
19
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

Dost?pne por?wnania s? w classes/sql_filter.php:
PHP:
    const EQUAL = ' = ';
    const LOWER = ' < ';
    const GREATER = ' > ';
    const NOT_EQUAL = ' != ';
    const NOT_LOWER = ' >= ';
    const NOT_GREATER = ' <= ';
    const LIKE = ' LIKE ';
    const NOT_LIKE = ' NOT LIKE ';
    const CRITERIUM_AND = ' AND ';
    const CRITERIUM_OR = ' OR ';
Do kodu doda?em sprawdzanie czy profesja (vocation) gracza jest wyzsze niz 2:
PHP:
		$filterComment = new SQL_Filter(new SQL_Field('vocation', 'players'), SQL_Filter::GREATER, 2);
		$filter = new SQL_Filter($filter, SQL_Filter::CRITERIUM_AND, $filterSkill);
Doda?em to pod ostatnim 'filtrem' (najpierw stworzylem nowy filtr, a potem stworzylem nowy filtr ktory laczy wczesniejsze filtry z nowym za pomoca AND )
PHP:
public function loadSkill()

	{

		$this->setClass('Highscore');

		$this->addOrder(new SQL_Order(new SQL_Field('value', 'player_skills'), SQL_Order::DESC));

		$this->addOrder(new SQL_Order(new SQL_Field('count', 'player_skills'), SQL_Order::DESC));

		$this->addExtraField(new SQL_Field('count', 'player_skills'));

		$this->addExtraField(new SQL_Field('value', 'player_skills'));

		$this->addExtraField(new SQL_Field('flag', 'accounts'));

		$filterWorld = new SQL_Filter(new SQL_Field('world_id', 'players'), SQL_Filter::EQUAL, $this->worldId);

		$filterPlayer = new SQL_Filter(new SQL_Field('id', 'players'), SQL_Filter::EQUAL, new SQL_Field('player_id', 'player_skills'));

		$filterSkill = new SQL_Filter(new SQL_Field('skillid', 'player_skills'), SQL_Filter::EQUAL, $this->skillType);

		$filter = new SQL_Filter($filterPlayer, SQL_Filter::CRITERIUM_AND, $filterSkill);

		$filterComment = new SQL_Filter(new SQL_Field('vocation', 'players'), SQL_Filter::GREATER, 2);
		$filter = new SQL_Filter($filter, SQL_Filter::CRITERIUM_AND, $filterSkill);

		if($this->highscoreConfig->isSetKey('groups_hidden'))

			foreach($this->highscoreConfig->getValue('groups_hidden') as $_group_filter)

				$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('group_id', 'players'), SQL_Filter::NOT_EQUAL, $_group_filter), SQL_Filter::CRITERIUM_AND, $filter);



		if($this->highscoreConfig->isSetKey('accounts_hidden'))

			foreach($this->highscoreConfig->getValue('accounts_hidden') as $_account_filter)

				$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('account_id', 'players'), SQL_Filter::NOT_EQUAL, $_account_filter), SQL_Filter::CRITERIUM_AND, $filter);



		if($this->vocation != '')

			$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('vocation', 'players'), SQL_Filter::EQUAL, $this->vocation), SQL_Filter::CRITERIUM_AND, $filter);



		$filter = new SQL_Filter($filterWorld, SQL_Filter::CRITERIUM_AND, $filter);

		$filter = new SQL_Filter(new SQL_Filter(new SQL_Field('account_id', 'players'), SQL_Filter::EQUAL, new SQL_Field('id', 'accounts')), SQL_Filter::CRITERIUM_AND, $filter);

		$this->setFilter($filter);

	}
R?wnie dobrze mo?na po staremu wpisywac zapytania:
PHP:
$costam = $SQL->query('SELECT `id` FROM `players`');
W highscores jest wykorzystane takie generowanie zapytan, bo Gesior 2012 to po??czenie starego gesiora i OTSME AAC (ktory nie zostal i nie zostanie ukonczony) [ ]

W wielu klasach acc. makera sa wykorzystane tak generowane zapytania, np. w classes/account.php jest funkcja pobierajaca tablice z obiektami klasy Player z graczami z 'tego konta':
PHP:
//
	public function getPlayers($forceReload = false)
	{
		if(!isset($this->players) || $forceReload)
		{
			$this->players = new DatabaseList('Player');
			$this->players->setFilter(new SQL_Filter(new SQL_Field('account_id'), SQL_Filter::EQUAL, $this->getID()));
			$this->players->addOrder(new SQL_Order(new SQL_Field('name')));
		}
		return $this->players;
	}
(przy okazji gracze sa przechowywani w zmiennej klasy Account i przy ponownym wywolaniu funkcji getPlayers() na danym koncie nie bedzie wysylane zapytanie do bazy tylko pobierze tablice graczy z zmiennej)
 
Last edited:

Xart Irok

Senior User
Joined
Sep 7, 2008
Messages
2,925
Reaction score
419
Age
32
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

a tak z ciekawo?ci si? zapytam mo?na u?ywa? na sztywno biblioteki PDO w tym nowym aac aby omin?? te filtry bo to wydaj? si? by? do?? nie por?czne moim zdaniem, a ja?niej chodzi mi oto
PHP:
$sql = new PDO(blablabla);
$result = $sql->prepare(blablabla);
$result->execute();
$result->closeCursor();
 

Gesior.pl

Ten G?sior
Joined
Apr 23, 2008
Messages
88
Reaction score
19
Odp: Dziwny system zapyta? do bazy danych w nowym gesiorze

a tak z ciekawo?ci si? zapytam mo?na u?ywa? na sztywno biblioteki PDO w tym nowym aac aby omin?? te filtry bo to wydaj? si? by? do?? nie por?czne moim zdaniem, a ja?niej chodzi mi oto
Mo?na, tw?j kod by wygl?da? tak:
PHP:
$result = $SQL->prepare(blablabla);
$result->execute();
$result->closeCursor();
$SQL to instancja klasy Database deklarowana przy ka?dym odpaleniu acc. makera w:


Klasa Database (i jej rozszerzenia MySQL/SQLite) obs?uguje wszystkie funkcje tak jak PDO, a w dodatku ??czy si? z baz? danych dopiero po wywo?aniu pierwszej funkcji z PDO. Dzi?ki temu kiedy acc. maker ?aduj? stron? kt?ra nie u?ywa zapyta? do bazy danych w og?le si? z ni? nie ??czy.
 
Status
Not open for further replies.
Top