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

Тема в разделе "Программирование / Скриптинг", создана пользователем antismert, 14 фев 2015.

  1. antismert

    antismert

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

    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);
    }
    }

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

    artyrka94

    Сообщения:
    182
    Симпатии:
    36
    PHP:
    public Action:MyTop(clientargs)
    {
    SQL_TQuery(g_StatsHSQL_SelectPlayerTop10"SELECT name,scores FROM rank ORDER BY scores DESC LIMIT 3"client);

    }
    public 
    SQL_SelectPlayerTop10(Handle:ownerHandle:hndl, const String:error[], any:client
    {
    decl String:NameTop[64];
    while (
    SQL_FetchRow(hndl)) 

    SQL_FetchString(hndl0NameTop64);
    PrintToChatAll("%s | %d"NameTop,SQL_FetchInt(1));
    }
    }
     
    Последнее редактирование: 14 фев 2015
    antismert и Monroe нравится это.
  3. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    PHP:
    public Action:MyTop(clientargs)
    {
     
    decl String:sQuery[1200];
     
    Format(sQuerysizeof(sQuery), "SELECT * FROM rank ORDER BY `scores` DESC LIMIT 3");
     
    SQL_TQuery(g_StatsHSQL_SelectPlayerTop10sQueryclient);
    }

    public 
    SQL_SelectPlayerTop10(Handle:ownerHandle:hndl, const String:error[], any:client
    {
     
    decl String:NameTop[64];
     
    decl String:ScoresTop[64];
     while (
    SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) 
     {
      
    SQL_FetchString(hndl1NameTop255);
      
    SQL_FetchString(hndl4ScoresTop255);
      
    PrintToChatAll("%s | %s"NameTop,ScoresTop);
     }
    }
    так чуть вернее.
    но проверь типы полей которые селектишь.
     
    antismert и Monroe нравится это.
  4. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    Monroe,:-D:-D:-D:-D профи нашёлся
     
    antismert нравится это.
  5. Хитрый_Ёжик

    Хитрый_Ёжик

    Сообщения:
    281
    Симпатии:
    94
    Если по хорошему, то запрос выглядит нормально.
    Попробуй выполнить его вручную (через какой-нибудь phpMyAdmin или т.п.) и напиши какой получится результат.
    Код:
    SELECT * FROM `rank` ORDER BY `scores` DESC LIMIT 3
    Также, как подметил artyrka94, поле score скорее всего типа INTEGER, а ты пытаешь получить его как строку (может SM и скушает, не проверял).

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

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    Хитрый_Ёжик, я более обобщённо дал, может ему в нескольких местах надо использовать данные. Тут спорить нет смысла. Суть в том, что мы в несколько раз реже объявляем переменные.

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

    R1KO Супер-модератор

    Сообщения:
    5.998
    Симпатии:
    2.992
    antismert, вероятнее всего что-то с запросом/бд/типом данных т.к. Каллбек вызовется когда запрос полностью завершен и данные получены/не получены. Поэтому он просто не может не успевать.
    Это хорошо видно когда в бд очень много данных и выбираешь тож много, при чем с разными условиями еще из нескольких таблиц, просто между SQL_TQuery и каллбеком будет ощутимая задержка.
     
    antismert нравится это.
  8. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.998
    Симпатии:
    2.992
    Насколько я знаю павн выдает данные в том типе, в котром ты запросил, а не как в бд.
     
    antismert нравится это.
  9. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    А можно как то сделать показ того сколько секунд длился запрос?
    У тебя сколько запросов в бд за раз отпправляется? какой хостинг у бд?
     
    antismert нравится это.
  10. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    В начале скрипта GetTime(), и в конце GetTime(), потом из последнего вычитаешь первое, и получаешь секунды.
     
    antismert нравится это.
  11. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.998
    Симпатии:
    2.992
    Primo, если запрос меньше секунды то не прокатит. Лучше GetGameTime()
     
    antismert нравится это.
  12. antismert

    antismert

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

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

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