Aller au contenu
tutur1004

Principe d'utilisation de skript-db

Messages recommandés

Skript-db : L'addon qui va vous faire aimer le SQL !

Bonjour, je présente aujourd'hui mon premier tuto sur le Forum, j'espère qu'il servira au plus grand nombre d'entre vous !

Avant de lire ce tuto, il est nécessaire d'avoir de légères bases en SQL, si vous n'en avez pas, pas de panique je tout de même vais aborder les principes de base.

 

Difficultés : ✪✪✪✫✫

Temps d'apprentissage : 30mn si vous connaissez le SQL ~ 2h sinon.

 

Le SQL:

Bon, vue que tout le monde ne sait pas forcément ce qu'est le SQL et pour pouvoir toucher un maximum de monde à travers ce tuto je vais en parler un peu !

Le SQL, c'est un langage de programmation, spécialement créé pour l'exploitation de bases de données, c'est pour cette raison qu'on associe toujours "SQL" à "Data Base". En gros, le SQL est le langage qui va vous permettre de gérer votre base de données.

Par ailleurs, le SQL permet d'utiliser vos Bases dans plusieurs langages de programmation (PHP, C++, Java, skript !). L'addon Skript-db permet donc d'utiliser le SQL sur skript dans toutes ses mesures.

 

La Base de données:

Pour le tuto que je vais aborder, nous allons uniquement traiter de bases de données de type "MySQL", je vous recommande vivement, si vous débutez, d'utiliser une base MySQL avec un accès PYPMyAdmin, qui vous permet d'avoir un panel graphique sur votre base de donnée et une assistance pour la rédaction de vos requêtes SQL (Très pratique pour la suite).

Pour expliquer rapidement, la base de données va stocker vos "informations" dans des "tables" organisées en colonnes et classés en plusieurs lignes.

 

Résumé:

Vous avez compris, le SQL vous permet d'exploiter des bases de données dans plusieurs programmes de langages différents, par exemple, vous pouvez grâce au SQL, partager des informations entre plusieurs serveur minecraft, ou entre un serveur minecraft et un site web.

 

Skript-db:

Voilà enfin le chapitre intéressant !

L'addon est ULTRA basique, mais ULTRA complet. Il permet au contraire des autres addons, d'exécuter n'importe quelle requête de SQL, en seulement 1 ET UNIQUEMENT 1 effect (en vrai il y en a 2 mais ils fonctionnement de la même manière l'un est juste plus complet donc disons 1 seul effect).

 

Donc, comme je l'ai dit il y a 2 effects pour effectuer des requêtes (query) SQL et 2 expressions, l'une pour se connecter une base de donnée et une autre expression pour récupérer vos erreurs SQL.

Concrètement nous allons donc utiliser "seulement" l'expression pour se connecter, et l'effect pour les effectuer des requêtes.

 

Ce connecter à votre BDD:

Alors déjà, j'aime beaucoup cet addon, car contrairement aux autres addons qui "gèrent" le SQL, il permet de se connecter à plusieurs bases différentes dans le même skript, et surtout de pouvoir les utiliser dans d'autres skript sans les rappeler. C'est magique, non OPTIMISÉ !!

 

Donc sans plus attendre on ce connecte:

on load:
   set {sql} to the database "mysql://%host%:%port%/%database-name%?user=%username%&password=%password%&useSSL=false"
   #    "useSSL", si votre base de donnée est protégée par un certificat SSL, en localhost ignoré le !

{sql}, ça va être la valeur avec laquelle vous aller pouvoir effectuer vos requêtes, ce qui veut dire que si vous voulez plusieurs bases, il suffit d'utiliser des vars différentes ({sql.1} puis {sql.2} ... etc ...).

Voilà, rien de compliqué c'est bon vous êtes connecté, une fois cette expression utilisée plus besoin de l'utiliser (Je vous conseil de la mettre dans un "on load")!

 

Effectuer une requête SQL:

Et bien, c'est tout l'intérêt de l'addon, alors comme je l'ai dit, il y a 2 effects différents mais qui permettent de faire légèrement la même chose. La différence c'est que l'un permet d'exécuter une requête 'unsafe' stockée dans une variable, et l'autre d'exécuter un texte brut (comprenez sans variables). Vous l'aurez compris, l'effect 'unsafe' permet donc d'exécuter des variable, ce qui est plutôt utile comparé à l'autre. Je ne vais donc montrer que l'effect 'unsafe' dans ce tuto.

#    Requête sans retour :
execute unsafe {_requete} in {sql}
#    Requête avec retour :
execute unsafe {_requete} in {sql} and store the result in {_output::*}

Bon voilà, un bon aperçue de l'effect, alors comment l'utiliser ?

 

- Premièrement il faut savoir si vous allez avoir besoin du paramètre de retour ou non, c'est simple, il y a 2 types de requêtes SQL, celles où vous modifiez la BDD, et celles où vous lisez la BDD, dans le cas où vous écrivez, pas besoin de retour, dans l'autre cas il vous faut un retour, évidement.

 

- Ensuite, il vous faut définir la requête {_requete}, c'est simplement une variable text.

 

[spoiler=Application et Exemples]

#   Petit exercice: un log de chat, pour cela il faut :
#   Une table avec 2 colonnes : "joueur" et "messsage", avec en bonus "date".

#   Si vous souhaitez réaliser ce tuto avec moi, je vous passe une ligne SQL.
#   Vous pouvez la rentrer dans votre console SQL pour générer la table :

CREATE TABLE IF NOT EXISTS `chat` (
 `joueur` varchar(32) CHARACTER SET utf8 DEFAULT NULL,
 `message` varchar(64) CHARACTER SET utf8 DEFAULT NULL,
 `date` varchar(20) CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Table du tuto skript-db par tutur1004';

#   Voilà, à présent passons au skript !

#   Le but: dès qu'un joueur écrira un message il sera enregistré dans votre base SQL.
#   À noter que "insert" permet d'ajouter une nouvelle entrée dans votre base, `chat` est le nom de la base.
on chat:
   set {_requete} to "INSERT INTO `chat` (`joueur`, `message`, `date`) VALUES ('%player%', '%message%', '%now%')"
   execute unsafe {_requete} in {sql}

#   Maintenant, on va essayer de récupérer avec une commande les x derniers messages d'un joueur (Connecté).
#   Nous allons utiliser la fonction SQL "SELECT" qui permet de lire une ligne (ou plusieurs) dans une table.
command /find-msg <player> <int>:
   trigger:
       set {_requete} to "SELECT * from `chat` WHERE `joueur` = '%arg-1%' ORDER BY `message` DESC LIMIT %arg-2%"
       execute unsafe {_requete} in {sql} and store the result in {_output::*}
       #   {_output::*} contiens maintenant les messages du joueur-
       #   - ainsi que plusieurs fois son pseudo et les différentes dates des différents messages.
       loop {_output::message::*}:
           send "Le %{_output::date::%loop-index%}% %arg-1% à dit:"
           send "%loop-value%"

L'exemple vous paraît compliqué ?

 

- Si vous n'avez pas compris le 'insert into', je vous conseille d'apprendre le SQL.

 

- Si vous n'avez pas compris le {_output::*}, je vais vous l'expliquer.

Le {_output::*} généré par la requête est classé en fonction des colonnes de votre base.

Si on reprend l'exemple, il y a (`joueur`, `message`, `date`) dans notre base.
J'ai écrit pour récupérer les messages "loop {_output::message::*}".
La variable ce répartie donc en 3 parties.
1) "_output", ça, tout le monde le sait, c'est le nom de la variable.
2) "message", ici, c'est le nom de la colonne qu'on souhaite lire.
3) "*", ici vont défiler les variable que la requête à "SELECT".

Un 2ème exemple? Aller:
J'ai ensuite utilisé send .. %{_output::date::%loop-index%}% ..
-> {_output::date::%loop-index%}
2) "date" le nom de la colonne qu'on souhaite lire, pour pouvoir afficher la date.
3) "%loop-index%", si on suit l'exemple, on a loop les index des messages,
Donc nous allons avoir les dates qui correspondent, puisqu'ils ont le même index de variable.

 

 

 

Voilà, j'espère avoir suffisamment détaillé le fonctionnement de l'addon, il est assez simple à comprendre et utilisé, vous pourrez le trouver sur le git-hub de btk5h ou sur mon post avec la liste des addons (Maj. en janvier 2018 !)

 

Tutur1004 !

  • J'aime 5

Partager ce message


Lien à poster
Partager sur d’autres sites

Généralement la doc officiel est en anglais + y'a rarement l'utilité y'a que des syntax

  • J'aime 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour, désolé de déterrer ce topic ;) Mais comment je fais pour enlever qqch de la base de donnée ? ex :

set {_requete5} to "DELETE FROM `faction_all_player` (`createur`, `faction`, `date`) VALUES ('%player%', '%faction of player%', '%now%')"
execute unsafe {_requete5} in {sql}

 Ca ne marche pas ;(

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 22/11/2018 à 19:42, LapizzadelaMama a dit :

Bonjour, désolé de déterrer ce topic 😉 Mais comment je fais pour enlever qqch de la base de donnée ? ex :


set {_requete5} to "DELETE FROM `faction_all_player` (`createur`, `faction`, `date`) VALUES ('%player%', '%faction of player%', '%now%')"
execute unsafe {_requete5} in {sql}

 Ca ne marche pas ;(

Regarde si ton exécution SQL n’est pas foireuse parce que je doute que ta commande SQL soit bonne

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.