Créer son jeu en PHP

Tout pour créer soit-même son jeu en PHP
 
AccueilAccueil  ­CalendrierCalendrier  ­FAQFAQ  ­RechercherRechercher  ­S'enregistrerS'enregistrer  ­MembresMembres  ­GroupesGroupes  ­ConnexionConnexion  
Poster un nouveau sujet   Répondre au sujetPartager | 
 

 Le SQL quelques explications

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Pascalr
Grand habitué


Nombre de messages: 344
Localisation: Haute Savoie
Date d'inscription: 11/10/2005

MessageSujet: Le SQL quelques explications   Dim 11 Déc - 17:53

On m'a fait remarquer (très justement) que j'utilisais quelque fois des ordres SQL que tous le monde ne connaît pas forcément.

Donc paf, un tuto SQL

Les bases (pas de données )

Les index : Savoir ou mettre les index.
La ou on en a besoin. Je sais c'est con de dire ça, mais c'est vraiment ce qu'il faut faire.

Très souvent je voie la table des User avec un index sur le nom.
Mais en fait vous faite une recherche 1 fois de temps en temps sur le nom, qu'elle intérêt qu'il soit indexé: aucun.
Même erreur, on fait une map et on index le type de case, on recherche jamais une case par son type, il vaut mieux indexer les coordonnées en X et en Y

Une chose à savoir, la recherche sur un Integer est des millier de fois plus rapide que la recherche sur une chaîne de caractère.
Donc le classique qui est : j'index toute mes tables sur le Login de mon utilisateur ce n'est vraiment pas génial. comme forcément vous vérifiez votre Utilisateur c'est facile de lui mettre un ID unique Integer et de faire l'indexation des tables sur cet ID.
Sans parler que toute vos query doivent utiliser login='$login' au lieu de log_id=$ID
Et si un jour vous voulez changer le login d'un utilisateur : bon courage.

Indexer une table de moins de 1000 enregistrements n'a que peut d'intérêt

En bref on index une table quand on à un problème de vitesse. Ou quand on est sur de soi.

Le select

on peut changer le nom d'une des variable d'un select
select x from map -> donne x=1, x=2 etc...
select x as lex from map -> donne lex=1, lex=2 etc ...

on peut faire un select sur une constante
Select 1 -> donne 1
donc
Select 1 as x -> donne x=1

On peut utiliser l'ordre UNION qui donne le résultat cumulé de deux requêtes
select x from map
union
select x from perso
-> x=1, x=2 etc...

Attention si la même valeur apparaît dans les deux select elle ne sera la qu'une seule fois
exemple
Select 1
union
select 1
-> 1 et pas 1,1
si on veut tout, on fait
select 1
union all
select 1
-> 1, 1

réutilisation d'un select comme d'une table
on peut utiliser le résultat d'un select dans la clause from d'une requête
select x
from (select 1 as x) as matable
-> x=1

donc du coup je peut facilement faire un truc du style
select x,y
from (select 1 as x union select 2 union select 3 union select 4) as matablex,
(select 1 as y union select 2 union select 3 union select 4) as matabley

pour avoir tout les couples de 1,1 à 4,4

L'insert

vous utilisez trop souvent le insert into map values(...)
Ce n'est pas génial car si vous modifier la table cela risque de donner des résultats étranges car les valeurs doivent être dans le bon ordre.

La bonne syntaxe c'est insert into map (x,y) values (...)
On indique les champs que l'on va insérer et l'ordre de présence.
L'avantage c'est que si map à un ID autoincrement, je n'ai pas besoin de lui donner une valeur.

et cela introduit à la méthode du Insert Select
A la place de la clause values on peut mettre une requête :
insert into map (x,y)
select lex, ley from ....

A quoi ça sert
petite explication sur comment fonctionne le moteur SQL
chaque fois qu'il reçois un ordre il fait
Analyse de la requête
Compilation de la requête
Execution de la requête
Validation de la requête
Libération de la mémoire

Chaque étape prend du temps donc quand on insert beaucoup d'enregistrements cela peut vraiment pauser un problème.
Si vous voulez insérer 3 lignes
insert into map (x,y) values (1,1) ;
insert into map (x,y) values (1,2) ;
insert into map (x,y) values (2,1) ;
cela va moins vite que
insert into map (x,y)
select 1,1
union
select 1,2
union
select 2,1

bon après on peut tout prendre en compte
Si je veux créer tous les couple de 1,1 à 4,4 c'est plus rapide (a écrire aussi) de faire
insert into map (x,y)
select x,y
from (select 1 as x union select 2 union select 3 union select 4) as matablex,
(select 1 as y union select 2 union select 3 union select 4) as matabley

que de me taper les 4*4 -> 16 lignes

en plus je peux faire fabriquer par PHP une partie de la requête pour ne pas avoir à la taper

La suite au prochain épisode

PS : si vous avez des questions j'essayerais d'y répondre

Amicalement, Pascal
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pascalr.yellis.net
carlou
Modérateur JeuPHP


Nombre de messages: 689
Localisation: Bordeaux
Date d'inscription: 27/08/2005

MessageSujet: Re: Le SQL quelques explications   Dim 11 Déc - 18:34

voila tout ce qu'il me manquait :thumright:

:study: :study:


vais meme l'imprimer
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kalash
Bavard


Nombre de messages: 36
Date d'inscription: 10/12/2005

MessageSujet: Re: Le SQL quelques explications   Dim 11 Déc - 22:24

Exactement ca pascalr, on va enfin pouvoir utiliser le SQL comme il se doit et exploiter à fond tes tutos

C'est egalement imprimé comme pour la pluspart de tes autres tutos
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
fiatt
Habitué


Nombre de messages: 112
Age: 32
Localisation: Le Mans (72)
Date d'inscription: 06/11/2005

MessageSujet: Re: Le SQL quelques explications   Lun 12 Déc - 10:40

Vite! j'appelle le pêre noël pour lui demander une imprimante!! :bigsmurf:

_________________
Projet en cours: Gestion et Stratégie
http://www.gestion-et-strategie.info

Papa d'une magnifique petite Charlotte!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.gestion-et-strategie.info
tirzite
Langue pendue


Nombre de messages: 88
Localisation: grenoble, vaucanson
Date d'inscription: 02/10/2005

MessageSujet: Re: Le SQL quelques explications   Lun 12 Déc - 10:56

merci pascal il est tres utile ton tuto
et meme indispensable pour comprendre tes tutos :mrgreen:

_________________
Le monde de krimta bientot la version alpha
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
-=[ X-ZoD ]=-
Modérateur Programmation


Nombre de messages: 795
Date d'inscription: 12/06/2005

MessageSujet: Re: Le SQL quelques explications   Lun 12 Déc - 23:20

toujorus aussi efficaces les tuto de pascal..je savais deja poru la majorité mais c'est toujoru pratique

je crsoi que ce lui ci il l'a ecrit en prenant son petit dej

_________________
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
dark_vidor
Bavard


Nombre de messages: 15
Date d'inscription: 04/12/2005

MessageSujet: Re: Le SQL quelques explications   Ven 10 Mar - 19:08

moi je fait les insert a la manière des updates ...

INSERT INTO matable SET champs1 = data1, champs2=data2 ... c'est pas très correct mais ça fonctionne et au moins on voit quel champs reçoit quelle variable assez rapidement maintenant coté performance je sais pas j'ai pas fait de test
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.derniere-bataille.net/
 

Le SQL quelques explications

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Créer son jeu en PHP :: PROGRAMMATION :: Tutoriaux - scripts-
Poster un nouveau sujet   Répondre au sujet