Raised This Month: $51 Target: $400
 12% 

SQLite > MySQL


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
yagami
Senior Member
Join Date: Jan 2021
Old 01-16-2024 , 05:21   SQLite > MySQL
Reply With Quote #1

Within sqlite I can use INSERT and SELECT in the same query, but I decided to change to MySQL at the last minute, and discovered that this is not possible to do here in amxx but I'm lost now to separate the Query


PHP Code:


SQLQuery_RegisterClan
(id)
{
    
formatex(Querycharsmax(Query),
        
"INSERT INTO clans (name, tag, status, owner_id, created_by) VALUES (\
            ^"
%s^",\
            ^"
%s^",\
            %d,\
            %d,\
            %d\
        );\
        INSERT INTO clans_members (clan_id, player_id, privilegies) VALUES (\
            (SELECT id FROM clans ORDER BY id DESC LIMIT 1),\
            %d,\
            %d\
        );\
        SELECT * FROM clans ORDER BY id DESC LIMIT 1;"
,
        
Player[id][pTemporaryClanName],
        
Player[id][pTemporaryClanTag],
        
CLAN_STATUS_ACTIVE,
        
Player[id][pID],
        
Player[id][pID],
        
Player[id][pID],
        
CLAN_MEMBER_PRIVILEGIES_ALL
    
);

    
log("SQLQuery_RegisterClan(id: %d) => %s"idQuery);

    new 
queryData[QueryDataEnum];

    
queryData[qPlayerId] = id;

    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_RegisterClan"QueryqueryDataQueryDataEnum);
}

SQLQuery_AcceptClanInvite(idnotificationId)
{
    new 
notification[NotificationEnum];

    
ArrayGetArray(Player[id][pNotifications], notificationIdnotificationNotificationEnum);

    
formatex(Querycharsmax(Query),
        
"UPDATE clans_members SET \
            status = 0 \
        WHERE player_id = %d \
        AND clan_id = %d; \
        INSERT INTO clans_members (player_id, clan_id) VALUES (\
            %d,\
            %d\
        );\
        SELECT \
            cm.clan_id, \
            member.id, \
            member.authid, \
            member.ip, \
            member.name, \
            cm.privilegies, \
            DATE_FORMAT('%%%%d/%%%%m/%%%%Y', cm.created_at) as created_at \
        FROM clans_members cm \
        INNER JOIN clans c \
            ON cm.clan_id = c.id \
        INNER JOIN players member \
            ON member.id = cm.player_id \
        WHERE \
            c.status = 1 \
        AND cm.status = 1 \
        ORDER BY cm.id DESC \
        LIMIT 1"
,
        
Player[id][pID],
        
notification[nActionID],
        
Player[id][pID],
        
notification[nActionID]
    );

    
log("SQLQuery_AcceptClanInvite(id: %d) => %s"idQuery);

    new 
queryData[QueryDataEnum];

    
queryData[qPlayerId] = id;
    
queryData[qOtherId] = notificationId;

    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_AcceptClanInvite"QueryqueryDataQueryDataEnum);
}

SQLQuery_CreateNotification(registerIdnotification[NotificationEnum])
{
    
formatex(Querycharsmax(Query),
        
"INSERT INTO players_notifications (\
            player_id, \
            subject, \
            message, \
            action, \
            action_id \
        ) VALUES ( \
            %d, \
            ^"
%s^", \
            ^"
%s^", \
            %d, \
            %d \
        ); \
        SELECT \
            id, \
            player_id, \
            subject, \
            message, \
            action, \
            action_id \
        FROM players_notifications \
        ORDER BY id DESC LIMIT 1;"
,
        
registerId,
        
notification[nSubject],
        
notification[nMessage],
        
notification[nAction],
        
notification[nActionID]
    );

    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_CreateNotification"Query);

yagami is offline
lexzor
Veteran Member
Join Date: Nov 2020
Old 01-16-2024 , 07:33   Re: SQLite > MySQL
Reply With Quote #3

you can use more inserts in same query

for select use SQL_Execute so you won't don t need to use another function for callback
lexzor is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 01-16-2024 , 17:10   Re: SQLite > MySQL
Reply With Quote #4

SQL_Execute() can interrupt gameplay. I typically only use it at plugin_cfg()/plugin_init() to create tables and stuff. So I'd stick with SQL_ThreadQuery().

Try something like this:
PHP Code:
enum QueryData_RegisterClan
{
    
qd_AddClan,
    
qd_AddMembers,
    
qd_GetClans
}
enum _:QueryDataEnum
{
    
qde_PlayerId,
    
QueryData_RegisterClan:qdeTransType
}


SQLQuery_RegisterClan(id)
{
    new 
queryDataQueryDataEnum ];
    
    
queryDataqde_PlayerId ] = id;
    
    
queryDataqdeTransType ] = qd_AddClan;
    
formatex(Querycharsmax(Query),"INSERT INTO clans (name, tag, status, owner_id, created_by) VALUES (^"%s^",^"%s^",%d,%d,%d" ,     Player[id][pTemporaryClanName],Player[id][pTemporaryClanTag],CLAN_STATUS_ACTIVE,Player[id][pID],Player[id][pID]);
    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_RegisterClan"QueryqueryDataQueryDataEnum);
    
log_amx("AddClan(id: %d) => %s"idQuery);
    
    
queryDataqdeTransType ] = qd_AddMembers;
    
formatex(Querycharsmax(Query),"INSERT INTO clans_members (clan_id, player_id, privilegies) VALUES ((SELECT id FROM clans ORDER BY id DESC LIMIT 1),%d,%d" Player[id][pID],CLAN_MEMBER_PRIVILEGIES_ALL);
    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_RegisterClan"QueryqueryDataQueryDataEnum);
    
log_amx("AddClanMember(id: %d) => %s"idQuery);
    
    
queryDataqdeTransType ] = qd_GetClans;
    
formatex(Querycharsmax(Query),"SELECT * FROM clans ORDER BY id DESC LIMIT 1;");
    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_RegisterClan"QueryqueryDataQueryDataEnum);
    
log_amx("GetClans(id: %d) => %s"idQuery);

__________________
Bugsy is offline
yagami
Senior Member
Join Date: Jan 2021
Old 01-17-2024 , 03:59   Re: SQLite > MySQL
Reply With Quote #5

Quote:
Originally Posted by Bugsy View Post
SQL_Execute() can interrupt gameplay. I typically only use it at plugin_cfg()/plugin_init() to create tables and stuff. So I'd stick with SQL_ThreadQuery().

Try something like this:
PHP Code:
enum QueryData_RegisterClan
{
    
qd_AddClan,
    
qd_AddMembers,
    
qd_GetClans
}
enum _:QueryDataEnum
{
    
qde_PlayerId,
    
QueryData_RegisterClan:qdeTransType
}


SQLQuery_RegisterClan(id)
{
    new 
queryDataQueryDataEnum ];
    
    
queryDataqde_PlayerId ] = id;
    
    
queryDataqdeTransType ] = qd_AddClan;
    
formatex(Querycharsmax(Query),"INSERT INTO clans (name, tag, status, owner_id, created_by) VALUES (^"%s^",^"%s^",%d,%d,%d" ,     Player[id][pTemporaryClanName],Player[id][pTemporaryClanTag],CLAN_STATUS_ACTIVE,Player[id][pID],Player[id][pID]);
    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_RegisterClan"QueryqueryDataQueryDataEnum);
    
log_amx("AddClan(id: %d) => %s"idQuery);
    
    
queryDataqdeTransType ] = qd_AddMembers;
    
formatex(Querycharsmax(Query),"INSERT INTO clans_members (clan_id, player_id, privilegies) VALUES ((SELECT id FROM clans ORDER BY id DESC LIMIT 1),%d,%d" Player[id][pID],CLAN_MEMBER_PRIVILEGIES_ALL);
    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_RegisterClan"QueryqueryDataQueryDataEnum);
    
log_amx("AddClanMember(id: %d) => %s"idQuery);
    
    
queryDataqdeTransType ] = qd_GetClans;
    
formatex(Querycharsmax(Query),"SELECT * FROM clans ORDER BY id DESC LIMIT 1;");
    
SQL_ThreadQuery(DatabaseHandle"@SQLCallback_RegisterClan"QueryqueryDataQueryDataEnum);
    
log_amx("GetClans(id: %d) => %s"idQuery);

But then I would have to create several enums one for each request?
yagami is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 01-17-2024 , 09:38   Re: SQLite > MySQL
Reply With Quote #6

If you do not need to take specific action based on the result of the individual queries, no.
__________________
Bugsy is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 14:19.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode