[Tutorial] Using BlueG's MySQL plugin R7 (with cache)
#18

You're right by your assumption, field names can be used and this might be a simpler approach, however many ways are possible.

One: knowing what you query for and thereby knowing field indexes.
Adding a new field that you query for does not require you to modify hundreds of indexes in your code, what you can do is use a query which specifies all the field names that you are loading. For example:
pawn Code:
mysql_function_query(dbHandle, "SELECT level,kills,deaths,online_time,vehicle FROM players WHERE name = 'MP2' LIMIT 0,1", true, "OnPlayerDataLoad", "i", playerid);
// Field indexes: level = 0, kills = 1, deaths = 2, online_time = 3, vehicle = 4
Adding a new field to query for is simple, the new index will be 5 in a case where you append the new field name...
pawn Code:
mysql_function_query(dbHandle, "SELECT level,kills,deaths,online_time,vehicle,health FROM players WHERE name = 'MP2' LIMIT 0,1", true, "OnPlayerDataLoad", "i", playerid);
Field `health` has an index of 5, this means that in your callback, doing:
pawn Code:
cache_get_row(0, 5, temp), health = strval(temp); // yeah, I did not make it a float
This code above assumes you have only one result and the query also uses the limit clause to make sure of this. So you're getting the 6th field of 1st row that the query returned and then storing it in a variable called health.

So what's the advantage to this behavior? You can easily do on-the-run development and modifications to your database!
Lets say you have such query:
SELECT * FROM players WHERE name = 'MP2' LIMIT 0,1
What does this mean? All fields in the table are queried for and will be returned in whatever callback you choose to use. If you are developing a new feature for your server (and this is surely most important if you're making a new gamemode from scratch and actually have it running publicly already), you might want to add a new field. But you can be sure that as soon as you add the new field somewhere in the table (not in the end of it), this can cause trouble.
This issue used to be worse in R6-2 where I used sscanf for parsing my database results. An extra unwanted field added to the parsed string instantly caused a lot of trouble.

This is not as bad in R7 with cache functions, but you should also take note that you do not always need all the fields. For example, you're making the query I mentioned above (SELECT * FROM players WHERE name = 'MP2' LIMIT 0,1) - you do not need to get all the data. You already know the player's name for example, you also might not need their password in case you're making an automatic login or if you compare the passwords in the query itself. So the less fields you have in your result, the faster it actually is. And I'm not saying that this is something that will be noticeable, but it is just about the coding practice and I doubt that specifying the required fields in the query itself is slower than eliminating the unwanted fields later on in your loading callback.

Two: Using field names
There's nothing wrong with this, yes. Use cache_get_field_content which is also documented and given an example in the first post of this topic.
An example for this would be:
pawn Code:
// Query somewhere
mysql_function_query(dbHandle, "SELECT kills,deaths,level FROM players WHERE name = 'MP2' LIMIT 0,1", true, "OnPlayerDataLoad", "i", playerid);

// The callback
forward OnPlayerDataLoad(playerid);
public OnPlayerDataLoad(playerid)
{
    new rows, fields;
    cache_get_data(rows, fields);
    if(!rows)
    {
        // We did not get any rows - account does not exist?
        return 1;
    }
    // Start storing the data
    new temp[12];
    cache_get_field_content(0, "kills", temp), gPlayerData[playerid][pKills] = strval(temp);
    cache_get_field_content(0, "deaths", temp), gPlayerData[playerid][pDeaths] = strval(temp);
    cache_get_field_content(0, "level", temp), gPlayerData[playerid][pLevel] = strval(temp);
    return 1;
}
This code is untested yet should give you the basic idea of this. Also note that you actually don't need to specify the fields you're querying, so your query can very well look like:
SELECT * FROM players WHERE name = 'MP2' LIMIT 0,1

Also, since you're starting out with your new gamemode, perhaps I can help you with your tables as well, do you mind posting your table syntax?

Have fun coding!
Reply


Messages In This Thread
Using BlueG's MySQL plugin R7 and newer (with cache) - by AndreT - 27.04.2012, 22:55
Re: Using BlueG's MySQL plugin R7 (with cache) - by Ricop522 - 28.04.2012, 05:01
Re: Using BlueG's MySQL plugin R7 (with cache) - by Niko_boy - 28.04.2012, 05:04
Respuesta: Using BlueG's MySQL plugin R7 (with cache) - by [Vector] - 28.04.2012, 05:36
Re: Using BlueG's MySQL plugin R7 (with cache) - by Burridge - 28.04.2012, 08:31
Re: Respuesta: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 28.04.2012, 08:51
Re: Using BlueG's MySQL plugin R7 (with cache) - by Lorenc_ - 28.04.2012, 09:39
Respuesta: Using BlueG's MySQL plugin R7 (with cache) - by [Vector] - 30.04.2012, 19:20
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 30.04.2012, 20:03
Re: Using BlueG's MySQL plugin R7 (with cache) - by MP2 - 18.05.2012, 16:50
Re: Using BlueG's MySQL plugin R7 (with cache) - by kikito - 18.05.2012, 16:51
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 18.05.2012, 19:29
Re: Using BlueG's MySQL plugin R7 (with cache) - by MP2 - 18.05.2012, 19:44
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 18.05.2012, 19:51
Re: Using BlueG's MySQL plugin R7 (with cache) - by MP2 - 18.05.2012, 20:03
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 18.05.2012, 20:37
Re: Using BlueG's MySQL plugin R7 (with cache) - by MP2 - 18.05.2012, 21:42
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 19.05.2012, 08:18
Re: Using BlueG's MySQL plugin R7 (with cache) - by MP2 - 19.05.2012, 12:04
Re: Using BlueG's MySQL plugin R7 (with cache) - by Hiddos - 19.05.2012, 12:07
Re: Using BlueG's MySQL plugin R7 (with cache) - by Luis- - 20.05.2012, 00:29
Re : Using BlueG's MySQL plugin R7 (with cache) - by Vukilore - 21.05.2012, 16:28
Respuesta: Using BlueG's MySQL plugin R7 (with cache) - by Sauxe - 22.05.2012, 03:26
Re: Using BlueG's MySQL plugin R7 (with cache) - by TheArcher - 23.05.2012, 19:06
Re: Using BlueG's MySQL plugin R7 (with cache) - by AShop - 27.05.2012, 18:08
Re: Using BlueG's MySQL plugin R7 (with cache) - by Luis- - 27.05.2012, 18:19
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 27.05.2012, 19:16
Re: Using BlueG's MySQL plugin R7 (with cache) - by ArchBishop - 27.05.2012, 20:25
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 27.05.2012, 20:43
Re: Using BlueG's MySQL plugin R7 (with cache) - by ArchBishop - 28.05.2012, 20:21
AW: Re: Using BlueG's MySQL plugin R7 (with cache) - by Extremo - 11.06.2012, 07:01
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 11.06.2012, 10:08
Re: Using BlueG's MySQL plugin R7 (with cache) - by Kyle - 11.06.2012, 11:08
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 11.06.2012, 11:56
AW: Using BlueG's MySQL plugin R7 (with cache) - by Extremo - 11.06.2012, 12:18
Re: Using BlueG's MySQL plugin R7 (with cache) - by MP2 - 23.06.2012, 09:23
Re: Using BlueG's MySQL plugin R7 (with cache) - by Kyle - 23.06.2012, 10:13
Re: Using BlueG's MySQL plugin R7 (with cache) - by MP2 - 23.06.2012, 13:37
Re: Using BlueG's MySQL plugin R7 (with cache) - by Kyle - 23.06.2012, 13:40
AW: Using BlueG's MySQL plugin R7 (with cache) - by Cank - 23.06.2012, 14:02
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 23.06.2012, 14:34
Re: Using BlueG's MySQL plugin R7 (with cache) - by SWEMike - 30.06.2012, 12:37
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 30.06.2012, 20:21
Re: Using BlueG's MySQL plugin R7 (with cache) - by Splav - 02.07.2012, 13:10
Re: Using BlueG's MySQL plugin R7 (with cache) - by Coicatak - 10.07.2012, 12:08
Re : Using BlueG's MySQL plugin R7 (with cache) - by scott1 - 16.07.2012, 17:39
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 17.07.2012, 20:28
Re : Using BlueG's MySQL plugin R7 (with cache) - by scott1 - 18.07.2012, 11:34
Re: Using BlueG's MySQL plugin R7 (with cache) - by Gumica - 22.07.2012, 12:35
Re: Re : Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 27.07.2012, 10:19
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 29.09.2012, 22:53
Re: Using BlueG's MySQL plugin R7 (with cache) - by Richie© - 03.10.2012, 21:08
Re: Using BlueG's MySQL plugin R7 (with cache) - by ReneG - 04.10.2012, 05:00
Re: Using BlueG's MySQL plugin R7 (with cache) - by Richie© - 04.10.2012, 20:54
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 12.10.2012, 15:56
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 13.10.2012, 12:58
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 13.10.2012, 13:03
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 13.10.2012, 13:05
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 13.10.2012, 13:15
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 13.10.2012, 14:33
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 13.10.2012, 14:54
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 13.10.2012, 15:04
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 01.11.2012, 07:58
Re: Using BlueG's MySQL plugin R7 (with cache) - by Edvin - 01.11.2012, 08:01
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 01.11.2012, 08:20
Re: Using BlueG's MySQL plugin R7 (with cache) - by IstuntmanI - 01.11.2012, 12:52
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 01.11.2012, 14:06
Re: Using BlueG's MySQL plugin R7 (with cache) - by IstuntmanI - 01.11.2012, 14:13
Re: Using BlueG's MySQL plugin R7 (with cache) - by ScriptWriter - 01.11.2012, 15:00
Re: Using BlueG's MySQL plugin R7 (with cache) - by ReneG - 01.11.2012, 16:09
Re: Using BlueG's MySQL plugin R7 (with cache) - by ReneG - 11.11.2012, 19:25
Re: Using BlueG's MySQL plugin R7 (with cache) - by AirKite - 11.11.2012, 20:05
Re: Using BlueG's MySQL plugin R7 (with cache) - by fordawinzz - 23.11.2012, 12:33
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 23.11.2012, 13:50
Re: Using BlueG's MySQL plugin R7 (with cache) - by fordawinzz - 24.11.2012, 09:38
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 24.11.2012, 11:20
Re: Using BlueG's MySQL plugin R7 (with cache) - by EterNo - 26.11.2012, 12:54
Re: Using BlueG's MySQL plugin R7 (with cache) - by EterNo - 26.11.2012, 18:28
Re: Using BlueG's MySQL plugin R7 (with cache) - by CoDeZ - 26.11.2012, 21:30
Re: Using BlueG's MySQL plugin R7 (with cache) - by Marusa - 03.12.2012, 18:26
Re: Using BlueG's MySQL plugin R7 (with cache) - by DaLgakıran - 30.05.2013, 14:01
Re: Using BlueG's MySQL plugin R7 (with cache) - by AndreT - 09.06.2013, 10:28
Re: Using BlueG's MySQL plugin R7 (with cache) - by Yashas - 21.07.2013, 08:56
Re: Using BlueG's MySQL plugin R7 (with cache) - by Richie© - 21.07.2013, 09:07
Re: Using BlueG's MySQL plugin R7 (with cache) - by Yashas - 21.07.2013, 09:21
Re: Using BlueG's MySQL plugin R7 (with cache) - by Richie© - 21.07.2013, 10:52
Re: Using BlueG's MySQL plugin R7 (with cache) - by Misiur - 21.07.2013, 10:57
Re: Using BlueG's MySQL plugin R7 (with cache) - by IstuntmanI - 21.07.2013, 11:14
Re: Using BlueG's MySQL plugin R7 (with cache) - by Grumbles - 28.07.2013, 23:46
Re: Using BlueG's MySQL plugin R7 (with cache) - by Luis- - 29.07.2013, 03:28
Re: Using BlueG's MySQL plugin R7 (with cache) - by Grumbles - 29.07.2013, 15:22
Re: Using BlueG's MySQL plugin R7 (with cache) - by Yashas - 30.07.2013, 03:07
Re: Using BlueG's MySQL plugin R7 (with cache) - by Michalec - 29.10.2013, 14:43
Re: Using BlueG's MySQL plugin R7 (with cache) - by gotwarzone - 12.11.2013, 08:50
Re : Using BlueG's MySQL plugin R7 (with cache) - by ombre - 11.01.2014, 13:35
Re: Using BlueG's MySQL plugin R7 (with cache) - by anou1 - 13.01.2014, 16:52
Re: Using BlueG's MySQL plugin R7 (with cache) - by dusk - 14.01.2014, 13:25
Re: Using BlueG's MySQL plugin R7 (with cache) - by KevinPRINCE - 22.02.2014, 20:51
Re: Using BlueG's MySQL plugin R7 (with cache) - by Guest4390857394857 - 20.03.2014, 08:03
Re: Using BlueG's MySQL plugin R7 (with cache) - by AiRaLoKa - 16.05.2014, 13:03
Re: Using BlueG's MySQL plugin R7 (with cache) - by ~Yoshi - 05.09.2015, 00:50
Re: Using BlueG's MySQL plugin R7 (with cache) - by AmigaBlizzard - 27.01.2016, 23:27
Re: Using BlueG's MySQL plugin R7 (with cache) - by maddinat0r - 29.01.2016, 13:07
Re: Using BlueG's MySQL plugin R7 (with cache) - by AmigaBlizzard - 07.02.2016, 12:05
Re: Using BlueG's MySQL plugin R7 (with cache) - by maddinat0r - 07.02.2016, 14:38
Re: Using BlueG's MySQL plugin R7 (with cache) - by AmigaBlizzard - 10.02.2016, 20:42
Re: Using BlueG's MySQL plugin R7 (with cache) - by Slawiii - 11.05.2016, 18:26
Re: Using BlueG's MySQL plugin R7 (with cache) - by thesuperuser - 13.05.2016, 12:36
Re: Using BlueG's MySQL plugin R7 (with cache) - by iSpy - 13.05.2016, 12:38

Forum Jump:


Users browsing this thread: 31 Guest(s)