MySql Запрос не успевает.

antismert

Участник
Сообщения
38
Реакции
2
Доброго времени суток! Столкнулся с проблемой.
Выполняя запрос он не успевает их сортировать(как я предполагаю)
По строке "скоре" не сортирует, выдает рендомные данные.
В чем может быть проблема?

public Action:MyTop(client, args)
{
decl String:sQuery[1200];
Format(sQuery, sizeof(sQuery), "SELECT * FROM rank ORDER BY `scores` DESC LIMIT 3");
SQL_TQuery(g_StatsH, SQL_SelectPlayerTop10, sQuery, client);

}
public SQL_SelectPlayerTop10(Handle:owner, Handle:hndl, const String:error[], any:client)
{

while (SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
{
decl String:NameTop[64];
SQL_FetchString(hndl, 1, NameTop, 255);
decl String:ScoresTop[64];
SQL_FetchString(hndl, 4, ScoresTop, 255);
PrintToChatAll("%s | %s", NameTop,ScoresTop);
}
}

---------------------
П.С.
Кто с доброй душой, помогите.)
 

artyrka94

Участник
Сообщения
181
Реакции
38
PHP:
public Action:MyTop(client, args)
{
SQL_TQuery(g_StatsH, SQL_SelectPlayerTop10, "SELECT name,scores FROM rank ORDER BY scores DESC LIMIT 3", client);

}
public SQL_SelectPlayerTop10(Handle:owner, Handle:hndl, const String:error[], any:client) 
{
decl String:NameTop[64];
while (SQL_FetchRow(hndl)) 
{ 
SQL_FetchString(hndl, 0, NameTop, 64);
PrintToChatAll("%s | %d", NameTop,SQL_FetchInt(1));
}
}
 
Последнее редактирование:

semjef

semjef.ru
Сообщения
993
Реакции
444
PHP:
public Action:MyTop(client, args)
{
 decl String:sQuery[1200];
 Format(sQuery, sizeof(sQuery), "SELECT * FROM rank ORDER BY `scores` DESC LIMIT 3");
 SQL_TQuery(g_StatsH, SQL_SelectPlayerTop10, sQuery, client);
}

public SQL_SelectPlayerTop10(Handle:owner, Handle:hndl, const String:error[], any:client) 
{
 decl String:NameTop[64];
 decl String:ScoresTop[64];
 while (SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) 
 {
  SQL_FetchString(hndl, 1, NameTop, 255);
  SQL_FetchString(hndl, 4, ScoresTop, 255);
  PrintToChatAll("%s | %s", NameTop,ScoresTop);
 }
}

так чуть вернее.
но проверь типы полей которые селектишь.
 

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
Если по хорошему, то запрос выглядит нормально.
Попробуй выполнить его вручную (через какой-нибудь phpMyAdmin или т.п.) и напиши какой получится результат.
C-подобный:
SELECT * FROM `rank` ORDER BY `scores` DESC LIMIT 3

Также, как подметил artyrka94, поле score скорее всего типа INTEGER, а ты пытаешь получить его как строку (может SM и скушает, не проверял).

semjef, зачем создавать лишнюю переменную если запрос статический?
 

semjef

semjef.ru
Сообщения
993
Реакции
444
Хитрый_Ёжик, я более обобщённо дал, может ему в нескольких местах надо использовать данные. Тут спорить нет смысла. Суть в том, что мы в несколько раз реже объявляем переменные.

Ну а ваще по теме - "не успевает обработать", это какой-то бред, поддержу с проверкой выдачи от запроса через phpmyadmin.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
antismert, вероятнее всего что-то с запросом/бд/типом данных т.к. Каллбек вызовется когда запрос полностью завершен и данные получены/не получены. Поэтому он просто не может не успевать.
Это хорошо видно когда в бд очень много данных и выбираешь тож много, при чем с разными условиями еще из нескольких таблиц, просто между SQL_TQuery и каллбеком будет ощутимая задержка.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
Хитрый_Ёжик;176210Также написал(а):
artyrka94[/b], поле score скорее всего типа INTEGER, а ты пытаешь получить его как строку (может SM и скушает, не проверял).
Насколько я знаю павн выдает данные в том типе, в котром ты запросил, а не как в бд.
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
А можно как то сделать показ того сколько секунд длился запрос?
У тебя сколько запросов в бд за раз отпправляется? какой хостинг у бд?
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
В начале скрипта GetTime(), и в конце GetTime(), потом из последнего вычитаешь первое, и получаешь секунды.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #11
Primo, если запрос меньше секунды то не прокатит. Лучше GetGameTime()
 

antismert

Участник
Сообщения
38
Реакции
2
Ребят всем по спасибо! Я знаю что на счет того что "Не успевает" я погорячился... На счет возврата я тоже вкурсе... Просто не смог не как выразить... Да возможно это из-за строки, но ведь в строку переходит уже при полученных данных и сортируем мы на шаг ранее. В общем буду дома замарочусь, отвечу вам.=)

Добавлено через 15 минут
Ребят выполнил запрос в ручную, выдает рендомно... Спасибо за умную мысль ткнуть меня в базу. Всем спасибо! Мой вариант тоже верный.

Добавлено через 17 минут
А ну и в базе шуточная ошибка.... 'varchar'
........Бывает
 
Последнее редактирование:
Сверху Снизу