Message populaire tutur1004 Posté(e) le 10 janvier 2018 Message populaire Posté(e) le 10 janvier 2018 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 ! 7
Twixer26 Posté(e) le 10 janvier 2018 Posté(e) le 10 janvier 2018 Merci, c'est mieux que sur la doc officiel ! :D 1
eaglezlpha Posté(e) le 10 janvier 2018 Posté(e) le 10 janvier 2018 Généralement la doc officiel est en anglais + y'a rarement l'utilité y'a que des syntax 2
LapizzadelaMama Posté(e) le 22 novembre 2018 Posté(e) le 22 novembre 2018 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 ;(
Vengelis_ Posté(e) le 25 novembre 2018 Posté(e) le 25 novembre 2018 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
Uuraniumm_PROD Posté(e) le 6 janvier 2019 Posté(e) le 6 janvier 2019 Est-ce possible d'effectuer une vérification ? Je souhaite, dès que j'aurai appris à maitriser le code faire un système de monnaie. Le problème, c'est que pour créer un shop par exemple, il faut bien vérifier si le joueur a assez de monnaie pour acheter le produit désiré... Est-ce possible alors par exemple d'envoyer une requête pour savoir si le joueur a assez d'argent dans la table ?
noftaly Posté(e) le 6 janvier 2019 Posté(e) le 6 janvier 2019 Oui c'est possible, et c'est même expliqué dans le tutoriel ? Pas exactement cet exemple, mais a partir de ce qui a été donné, c'est tout a fait possible 1
> NoaGamingFR Posté(e) le 6 février 2019 Posté(e) le 6 février 2019 Bonjour, je voudrais m'intèrésser au BDD dans skript, car j'ai un network [bungee] (pour l'instant en local, mais j'ai déjà le vps pour...) j'aurais donc voulu avoir un exemple/une aide afin d'avoir dans ma BDD une table monnaie par exemple, avec - joueur - monnaie (et pouvoir lire et écrire dans cette table, car j'ai compris le tuto, mais pas très bien pour faire ce type de trucs !) Si vous préferez que je créer un sujet, je peut le faire 🙂
tutur1004 Posté(e) le 27 février 2019 Auteur Posté(e) le 27 février 2019 Je pense que ton problème ce situe plus sur de l'aide en SQL que avec Skript-db, fait un new sujet et MP le moi !
skatouxytb Posté(e) le 18 mars 2019 Posté(e) le 18 mars 2019 (modifié) EDIT: Merci beaucoup pour ce tutoriel ! J'ai trouvé comment faire, merci beaucoup. Modifié le 18 mars 2019 par skatouxytb 1
Thib93 Posté(e) le 23 avril 2020 Posté(e) le 23 avril 2020 Bonjour, Skript-db fonctionne-t-il en 1.7.10 ? Sous Cauldron. Merci
tutur1004 Posté(e) le 30 avril 2021 Auteur Posté(e) le 30 avril 2021 Le 23/04/2020 à 14:50, Thib93 a dit : Bonjour, Skript-db fonctionne-t-il en 1.7.10 ? Sous Cauldron. Merci Désolé, je n'ai pas la réponse à cette question :/
nymphisios Posté(e) le 27 mars 2022 Posté(e) le 27 mars 2022 Bonjour ! Alors voilà, je me heurte à un problème majeur malgré avoir des connaissances en SQL ainsi que bien suivi le tuto... J'ai besoin de faire : SELECT * FROM joueurs WHERE joueurs.uuid = '{_variable}' (j'ai simplifié la requête en retirant les alias, jointures...) Cette requête marche à merveille si je remplace {_variable} par 'la valeur en texte brut' ... Je n'ai aucun résultat à ma requête si j'utilise '{_variable}' ou même '%uuid of player%' - et pourtant j'ai vérifié, la variable a bien la bonne valeur. Je récupère <None> constamment si je mets une variable dans une requête... Quelqu'un saurait pourquoi ? Merci !
Wast Posté(e) le 7 avril 2022 Posté(e) le 7 avril 2022 Le 27/03/2022 à 16:18, nymphisios a dit : Bonjour ! Alors voilà, je me heurte à un problème majeur malgré avoir des connaissances en SQL ainsi que bien suivi le tuto... J'ai besoin de faire : SELECT * FROM joueurs WHERE joueurs.uuid = '{_variable}' (j'ai simplifié la requête en retirant les alias, jointures...) Cette requête marche à merveille si je remplace {_variable} par 'la valeur en texte brut' ... Je n'ai aucun résultat à ma requête si j'utilise '{_variable}' ou même '%uuid of player%' - et pourtant j'ai vérifié, la variable a bien la bonne valeur. Je récupère <None> constamment si je mets une variable dans une requête... Quelqu'un saurait pourquoi ? Merci ! Bonjour 🙂 Il me semble qu'il manque les "%%" autour de ta variable ? (Je tente on sait jamais) 1
tutur1004 Posté(e) le 7 avril 2022 Auteur Posté(e) le 7 avril 2022 Le 27/03/2022 à 16:18, nymphisios a dit : Bonjour ! Alors voilà, je me heurte à un problème majeur malgré avoir des connaissances en SQL ainsi que bien suivi le tuto... J'ai besoin de faire : SELECT * FROM joueurs WHERE joueurs.uuid = '{_variable}' (j'ai simplifié la requête en retirant les alias, jointures...) Cette requête marche à merveille si je remplace {_variable} par 'la valeur en texte brut' ... Je n'ai aucun résultat à ma requête si j'utilise '{_variable}' ou même '%uuid of player%' - et pourtant j'ai vérifié, la variable a bien la bonne valeur. Je récupère <None> constamment si je mets une variable dans une requête... Quelqu'un saurait pourquoi ? Merci ! Montre un peu plus ton code. Mais j'ai dans l'idée que tu n'as pas suivi pleinement mon explication sur le tuto, j'ai expliqué qu'il existait 2 fonctions, une basique et une "unsafe", comme expliqué si tu souhaites utiliser des variables skript, tu dois définir une variable de type texte avec le contenu de ta requête PUIS ENSUITE l'exécuter avec l'expression "unsafe". Si tu as plus de questions, je t'invite à passer sur le Discord, n'hésite pas à dire ici si la solution fonctionne pour toi. MileKat
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant