PDA

Просмотр полной версии : [Function] Топы



Seregamil
27.09.2014, 16:15
Функция, позволяющая построить топ лист как по возрастанию, так и по убыванию.
Данные берутся из базы данных( SQLite, под MySQL можете подстроить сами, основную логику системы я написал ).
Аргументы функции:

(
str[], // строка, в которую будут записываться значения
DB: database, // база данных, из которой берутся значения
tableName[], // название таблицы, в которой производится поиск
name[], // название столбца, значение которого будет записываться и показывать например имя игрока, который в топе
order[], //название столбца, по которому производится построение списка
limit, //максимальное количество значений топа
bool: maxToMin = true, // необязательный аргумент. перестраивает список от меньшего к большему
len = sizeof str // так же необязательный аргумент. указывает на максимальное количество символов в форматируемой строке
)

Пример использования функции:


new DB: players = db_open( "players.db" ) ; //отрыли базу данных
new str[ 256 ]; // будем сюда записывать
CreateTopFromBase(
str, //строка, в которую записываются значения
players, // БД
"PLAYERS", // название таблицы
"NAME", // идентификатор
"MONEY", // топовое значение
4 // максимальное кол-во значений в топе
);
ShowPlayerDialog( playerid, 1, DIALOG_STYLE_MSGBOX, "Top list", str, "Ok","" );// покажем топ лист

Мне лень было заходить в игру, дабы делать скриншот, тестировал в консольке ^_^.
Результат запроса, показанного в примере:
http://breedpmnr.ru/i/FB15E9

Сама функция:

stock CreateTopFromBase( str[], DB: database, tableName[], name[], order[], limit, bool: maxToMin = true, len = sizeof str ){
new
query_str[ 70 ], // запрос
name_save[ MAX_PLAYER_NAME + 1 ], //имя юзера в выходной строке
DBResult: topResult // запрос в таблицу
;

format( query_str, sizeof query_str, "SELECT %s, %s FROM %s ORDER BY %s %s LIMIT %i", name, order, tableName, order, ( maxToMin == true ? ( "DESC" ) : ( "ASC" ) ), limit );
topResult = db_query( database, query_str ) ; // произведи запрос в таблицу

do {
db_get_field_assoc( topResult, name, name_save, MAX_PLAYER_NAME + 1 ) ; // получим имя для вывода
db_get_field_assoc( topResult, order, query_str, sizeof query_str ) ; // получим значение игрока

format( str, len, "%s%s : %s\n", str, name_save, query_str ); // добавим в строку
} while( db_next_row( topResult ) ) ; //пойдем к следующему результату

db_free_result( topResult ); // очистим результат
}


Автор: единственный идиот, которому понадобилась эта бредофункция, т.е. я.

[ForD]
03.10.2014, 20:36
Примного благодарен,в будущем пригодится,так что эти похвалы и бурные аплодисменты заранее вам!
P.S. Видимо нас 2 идиотов :pleasantry: