Mysql R31 Threaded GetInt funktion ?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,
    ich würde gerne wissen wie man eine GetInt Funktion zu Stande bekommt ich zeige einfach mal diese funktion hier wo mir von Anfang an klar war das sie so nicht klappen wird
    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[95], strTable[20], strField[20], strWhere[20], strIs[20];
    mysql_real_escape_string(Table, strTable);
    mysql_real_escape_string(Field, strField);
    mysql_real_escape_string(Where, strWhere);
    mysql_real_escape_string(Is, strIs);
    format(query, sizeof(query), "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    return mysql_function_query(MySQLHandle, query, true, "", "");
    }


    nur wüsste ich jetzt nicht wie ich so eine Funktion mache ohne den Gamemode "zu verlangsamen"


    mfg tdXkiller

  • Ich empfehle dir solche Funktonen eh zu lassen, da du mit solchen Funktionen alle Vorteile von MySQL einfach aus dem Fenster schmeißt.


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Hmm ja aber wie soll ich sonst an einzelne werte zu Überprüfung von sachen kommen ? 8| muss ich sogesehen für jeden kleinen Pippifax alles aus der db laden lassen und abspeichern lassen um es zu verwenden also ist es so gesehen kaum möglich einzelne vars zur Überprüfung zu laden ?

  • Hmm ja aber wie soll ich sonst an einzelne werte zu Überprüfung von sachen kommen ? 8| muss ich sogesehen für jeden kleinen Pippifax alles aus der db laden lassen und abspeichern lassen um es zu verwenden also ist es so gesehen kaum möglich einzelne vars zur Überprüfung zu laden ?


    Das kannst du mit einem ganz einfachen Query machen und danach musst du abprüfen ob der eintrag existiert.


    format(query,64,"SELECT 1 FROM `accounts` WHERE `Banane` = '%d' LIMIT 0,1",var);
    mysql_query(query)
    mysql_store_result();
    if(!mysql_num_rows())return print("Eintrag nicht gefunden"),mysql_free_result();
    print("Eintrag gefunden");
    mysql_free_result();


    oder
    format(query,64,"SELECT COUNT(*) FROM `accounts` WHERE `Banane` = '%d' LIMIT 0,1",var);
    oder
    format(query,64,"SELECT `Curry` FROM `accounts` WHERE `Banane` = '%d' LIMIT 0,1",var);


    bei dem Select query kannst du danach raus lesen was du willst ob du das zählen lässt 1 zurück geben lässt oder den inhalt einer Zelle, das ist egal.


    Bei der R7 Version würde das so aussehen


    forward @MYSQL_CHECK_ENTRY();


    format(query,64,"SELECT 1 FROM `accounts` WHERE `Banane` = '%d' LIMIT 0,1",var);
    mysql_function_query(con_Handle,query,true,"@MYSQL_CHECK_ENTRY","");



    @MYSQL_CHECK_ENTRY(){
    new entry[2];
    cache_get_data(entry[0],entry[1]);
    if(!entry[0])return print("kein Eintrag gefunden");
    return print("Eintrag gefunden");
    }

    Einmal editiert, zuletzt von Akino Kiritani () aus folgendem Grund: Stings korrigiert

  • Ja aber er kann mir ja nicht die Zahl oder was auch immer in dem Feld steht returnen somit macht diese Funktion keinen sinn


    mfg tdXkiller


    es kommt drauf was du zurück geben möchtest an global definierte arrays , integer oder floats geht das ohne probleme. Zu dem kannst du parameter an die Funktion übergeben, welche aufgerufen wird

  • Aber wird der Gamemode dadurch nicht ausgebremmst ? 8| oder habe ich das irgendwie falsch verstanden ?


    Nein natürlich nicht die Anweisungen , welche ausgeführt werden , werden step by step verarbeitet. Wenn du ein query absendest wartet dein Skript nicht solange bis was zurück kommt. Das query wird vom MySQL Server verarbeitet und wenn die Ergebnisse gefunden werden , werden diese verarbeitet vom SA:MP Server Prozess.

  • Aber wird der Gamemode dadurch nicht ausgebremmst ? 8| oder habe ich das irgendwie falsch verstanden ?


    Nein, gar nicht, es wird nur in den rahm gespeichert.
    Die ständigen Querys gehen jedoch voll auf die CPU und sind daher nicht so doll.


    Und zudem solltest du wissen was Threads sind, bevor du Mysql R7 oder höher benutzt.
    Den Threaded Querys sind was ganz anderes als die normalen querys. threated Querys sind schwerer und du musst mehr überlegen, doch dafür sind Threated Querys um einiges Ressourcen Schonender.


    Im Eneffekt solltest du dich mit SetTimerEx und den übergeben von Variablen an Timern auskennen, den Threads sind nicht anderes wie Timer (Publics) die ausgeführt werden, wenn der Mysql Server die daten verarbeitet haben.
    Normale Querys= Der Server Wartet bisMysql alles verarbeitet hat, in dieser Warte Zeit kann jedoch der Server nichts anderes machen als angestrengt warten

  • Ich weiß schon was Threads sind nur von dem einen wird mir irgendwie gesagt das geht nicht und von dem anderen das geht und in einer Sache sagen sie immer das gleiche und zwar das der query von der Mysql datenbank verarbeitet wird nur checke ich das halt noch nicht wie man das machen soll aber um in meinem Script weiter zu kommen brauche ich Threads für die Funktionen die ich mache weil sonst der Server "Laggt" bzw der Game mode von den Mysql anfragen in meinem Bank System angehalten wird