[mysql] requete

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [mysql] requete

par guetguet » 02 janv. 2008, 00:34

oui mais j'ai résolut le problème c'est bon,
bah merci pour tout tes conseils je vais mettre en application tous tes conseils et je viendrais dire ce qu'il en ait ici quand j'aurais fini :)

par Sékiltoyai » 01 janv. 2008, 23:08

Comme je t'ai dit, je te conseillerais de mettre recherches, vaisseaux, et batiments dans des tables à part.

Sinon, pour ta requète, je ne vois pas de problème, tu n'as pas d'erreur sql ? il te sélectionne le reste, et pas ces deux champs là ?

par guetguet » 01 janv. 2008, 20:23

oki même si elle sont trés grosse mais je ferais comme tu me la conseillé :)

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `joueurs` ( `id` int(11) NOT NULL auto_increment, `pseudo` varchar(255) NOT NULL, `mdp` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `version` varchar(255) NOT NULL, `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP, `galaxie` int(11) NOT NULL, `systeme` int(11) NOT NULL, `position` int(11) NOT NULL, `points_total` int(11) NOT NULL, `points_flotte` int(11) NOT NULL, `points_recherche` int(11) NOT NULL, `points_total_encour` float NOT NULL, `points_flotte_encour` float NOT NULL, `points_recherche_encour` float NOT NULL, `pertes_infliges` int(11) NOT NULL, `pertes_reçu` int(11) NOT NULL, `alliance` varchar(255) NOT NULL, `processique` int(11) NOT NULL, `processique_temps` int(11) NOT NULL, `conduction` int(11) NOT NULL, `conduction_temps` int(11) NOT NULL, `espionnage` int(11) NOT NULL, `espionnage_temps` int(11) NOT NULL, `armes` int(11) NOT NULL, `armes_temps` int(11) NOT NULL, `bouclier` int(11) NOT NULL, `bouclier_temps` int(11) NOT NULL, `blindage` int(11) NOT NULL, `blindage_temps` int(11) NOT NULL, `tritorsion` int(11) NOT NULL, `tritorsion_temps` int(11) NOT NULL, `drivepulsion` int(11) NOT NULL, `drivepulsion_temps` int(11) NOT NULL, `hypertritorsion` int(11) NOT NULL, `hypertritorsion_temps` int(11) NOT NULL, `ions` int(11) NOT NULL, `ions_temps` int(11) NOT NULL, `laser` int(11) NOT NULL, `laser_temps` int(11) NOT NULL, `platinium` int(11) NOT NULL, `platinium_temps` int(11) NOT NULL, `connection_interplanetaire` int(11) NOT NULL, `connectioni_temps` int(11) NOT NULL, `graviton` int(11) NOT NULL, `graviton_temps` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=63 ;

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `planetes` ( `id` int(11) NOT NULL auto_increment, `id_joueur` int(11) NOT NULL, `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `galaxie` int(11) NOT NULL, `systeme` int(11) NOT NULL, `position` int(11) NOT NULL, `tmin` int(11) NOT NULL, `tmax` int(11) NOT NULL, `diametre` int(11) NOT NULL, `case_util` int(11) NOT NULL, `caset` int(11) NOT NULL, `nom` varchar(255) NOT NULL, `zinc` int(11) NOT NULL, `mercure` int(11) NOT NULL, `oxonium` int(11) NOT NULL, `uranium` int(11) NOT NULL, `mine_zinc` int(11) NOT NULL, `zinc_temps` int(11) unsigned NOT NULL, `mine_mercure` int(11) NOT NULL, `mercure_temps` int(10) unsigned NOT NULL, `mine_oxonium` int(11) NOT NULL, `oxonium_temps` int(11) unsigned NOT NULL, `mine_uranium` int(11) NOT NULL, `uranium_temps` int(10) unsigned NOT NULL, `pourcentage_zinc` int(11) NOT NULL, `pourcentage_mercure` int(11) NOT NULL, `pourcentage_oxonium` int(11) NOT NULL, `pourcentage_uranium` int(11) NOT NULL, `centrale_condensation` int(11) NOT NULL, `central1_temps` int(11) NOT NULL, `centrale_oxonium` int(11) NOT NULL, `central2_temps` int(11) NOT NULL, `station_solaire` int(11) NOT NULL, `temps_stations` int(11) NOT NULL, `depot_zinc` int(11) NOT NULL, `depotz_temps` int(11) NOT NULL, `depot_mercure` int(11) NOT NULL, `depotm_temps` int(11) NOT NULL, `depot_oxonium` int(11) NOT NULL, `depoto_temps` int(11) NOT NULL, `depot_uranium` int(11) NOT NULL, `depotu_temps` int(11) NOT NULL, `centre_scientifique` int(11) NOT NULL, `centres_temps` int(11) NOT NULL, `centre_de_combat` int(11) NOT NULL, `centrec_temps` int(11) NOT NULL, `centre_robotique` int(11) NOT NULL, `centrerobo_temps` int(11) NOT NULL, `usine_robotique` int(11) NOT NULL, `usinerobo_temps` int(11) NOT NULL, `terramodeleur` int(11) NOT NULL, `terramodeleur_temps` int(11) NOT NULL, `reservoir_a_missile` int(11) NOT NULL, `reservoirm_temps` int(11) NOT NULL, `transporteur_gt` int(11) NOT NULL, `transporteur_gt_10` int(11) NOT NULL, `chasseur` int(11) NOT NULL, `chasseur_vipe` int(11) NOT NULL, `cuirasse` int(11) NOT NULL, `destroyer` int(11) NOT NULL, `bomber` int(11) NOT NULL, `forteresse_destructrice` int(11) NOT NULL, `wraper` int(11) NOT NULL, `sonde` int(11) NOT NULL, `convertisseur` int(11) NOT NULL, `colonisateur` int(11) NOT NULL, `lanceur_afx` int(11) NOT NULL, `lanceur_afx_10` int(11) NOT NULL, `laser_canon` int(11) NOT NULL, `tirailleur` int(11) NOT NULL, `cataliseur` int(11) NOT NULL, `lanceur_de_platinium` int(11) NOT NULL, `boucliant` int(11) NOT NULL, `boucliant_10` int(11) NOT NULL, `intersepteur` int(11) NOT NULL, `missile_afx` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

par Sékiltoyai » 01 janv. 2008, 17:43

oki je vais coder tout à l'heure un module ou seul moi (connecté) je verrai le temps de chargement de chaque page et le nombre de requêtes exécutés.
Euh, c'eut été mieux de mesurer directement le temps de l'opération que l'on veut tester, pas de la page entière…
-ESt ce que cette requête est bien conçue ?

Code : Tout sélectionner

$retour = mysql_query('SELECT UNIX_TIMESTAMP(p.timestamp), p.zinc, p.mercure, p.oxonium, p.uranium, p.mine_zinc, p.mine_mercure, p.mine_oxonium, p.mine_uranium, p.centrale_oxonium, p.depot_zinc, p.depot_mercure, p.depot_oxonium, p.depot_uranium, p.pourcentage_zinc, p.pourcentage_mercure, p.pourcentage_oxonium, p.pourcentage_uranium, p.centrale_condensation, p.station_solaire, p.tmin, p.tmax FROM planetes p join joueurs j on p.id_joueur=j.id WHERE j.pseudo=\''.$pseudo.'\'');
-Si elle est bien conçu j'ai essayé toute à l'heure de récupérer des infos de la table joueurs en rajoutants les champs j.pseudo, j.conduction dans la sélection des champs juste avant le FROM mais il ne me les sélectionne pas :S
Tu peux donner le schéma de tes tables (sous forme d'exportation CREATE TABLE…).

par guetguet » 01 janv. 2008, 17:11

oki je vais coder tout à l'heure un module ou seul moi (connecté) je verrai le temps de chargement de chaque page et le nombre de requêtes exécutés.

sinon j'aurais deux autres 'tite question :
-ESt ce que cette requête est bien conçue ?

Code : Tout sélectionner

$retour = mysql_query('SELECT UNIX_TIMESTAMP(p.timestamp), p.zinc, p.mercure, p.oxonium, p.uranium, p.mine_zinc, p.mine_mercure, p.mine_oxonium, p.mine_uranium, p.centrale_oxonium, p.depot_zinc, p.depot_mercure, p.depot_oxonium, p.depot_uranium, p.pourcentage_zinc, p.pourcentage_mercure, p.pourcentage_oxonium, p.pourcentage_uranium, p.centrale_condensation, p.station_solaire, p.tmin, p.tmax FROM planetes p join joueurs j on p.id_joueur=j.id WHERE j.pseudo=\''.$pseudo.'\'');
-Si elle est bien conçu j'ai essayé toute à l'heure de récupérer des infos de la table joueurs en rajoutants les champs j.pseudo, j.conduction dans la sélection des champs juste avant le FROM mais il ne me les sélectionne pas :S

Merci de vos réponses au fait :D Sa m'aide vraiment pas mal

par Sékiltoyai » 01 janv. 2008, 16:37

Tu utilises la fonction microtime() de php pour avoir le temps en microsecondes.
Et tu fais la différence pour avoir le temps qu'a pris l'opération (Regarde la doc de microtime() pour avoir plus d'infos à ce sujet).

par guetguet » 01 janv. 2008, 15:25

A ben oui ^^

Sinon ben pour le temps de calcul comment puis-je faire pour le savoir ?

par Sékiltoyai » 01 janv. 2008, 14:32

Mais pour la table galaxie je fait comment alors ?
Bah les informations sont du coup dans la table planete
Sinon pour les pourcentages de production tu parlais ?
Je disais que il faut voir en fonction du temps de calcul que ca prend si c'est utile de stocker cette information ou non…

par guetguet » 01 janv. 2008, 14:20

^^ j'ai justement multiplier les champs dans la table planète mais je vais surement suivre ton conseil.
Mais pour la table galaxie je fait comment alors ? Sinon pour les pourcentages de production tu parlais ?

par Sékiltoyai » 01 janv. 2008, 13:11

Je ne crois pas que les systèmes aient des noms, et ils ne sont pas reliés à un joueur précis.

Personnellement j'aurais vu un truc plutôt du genre :

-table joueur (id, nom, login, …)
-table planète (id, id_joueur, nom, galaxie, système, position, zinc, mercure, oxonium, uranium)
Les pourcentages ne peuvent pas se recalculer à chaque fois qu'ils sont utilisés ? Niveau temps de calcul ça donnerait quoi ?
Sinon j'ai du mal à comprendre à quoi peut être utile du mercure :D
-table infrastructure (id_planete, type (entier), niveau)
On met tous les batiments et autres infrastructures dans une table à part histoire d'éviter de multiplier les champs dans la table planète…
Et tu fais pareil si par exemple tu mets des vaisseaux ou des recherches ou tout autre chose.

par Kaoteknik » 01 janv. 2008, 11:53

Je pense que tu devrais commencer par scinder ta table en trois tables distinctes :

- Une table "joueurs" contenant l'id et le pseudo de chacun d'entre-eux.
- Une table "systemes" contenant un id, le nom du système et l'id du joueur.
- Une table "planetes" contenant un id, le nom de la planète, l'id du système et autant de champs supplémentaires qu'il y a de ressources différentes.

Pour la dernière table il suffirait d'indiquer dans les champs des différentes ressources une valeur 0 (NULL si la ressource n'est pas disponible sur cette planète) ou 1 (NOT NULL si la ressource est présente sur cette planète).

Ensuite pour extraire de la base de données les infos nécessaires il faudra passer par des jointures.

Si par exemple tu veux obtenir la liste des joueurs et des planètes qu'ils ont en leur possession, la requête pourrait être comme ceci :

Code : Tout sélectionner

$req = "SELECT joueurs.pseudo, systemes.nom, planetes.nom ". "FROM joueurs, systeme, planetes ". "WHERE systemes.id_joueur = joueurs.id AND planetes.id_systeme = systeme.id";
A tester evidemment, mais commence déjà par séparer tes tables... :)

par guetguet » 01 janv. 2008, 10:21

^^ il ne ressemblera aucunement à oTRUC :p c'est juste du même genre.

VOus pouvez m'aider svp ?

ET bonne anné et bonne santé bien sur :)

par Kaoteknik » 01 janv. 2008, 03:28

Toute ressemblance avec un jeu dont le nom commence par "O" serait fortuite... :P

par Sékiltoyai » 01 janv. 2008, 01:10

Tiens ca me rappelle un autre jeu ça… :)

par guetguet » 31 déc. 2007, 21:12

en fait oui il me semble que c'est pas bon ... si tu pouvais m'aider à mieux la constituer. En fait dans mon site j'ai une page galaxie où il y a 455 système solaires et où il y a 15 places par système solaire. En fait dés qu'un joueur colonise on lui attribue la place dans un système où il colonise et moi ce que j'ai fait c'est que j'ai crée la table g1 ci dessus en ayant en tête que name1 est le pseudo du joueur occupant la place 1 du système choisie de la galaxie, name2 le pseudo du joueur de la place 2 ... jusqu'à name15. Pareillement dnas chque place il peut y avoir des ressources (zinc, mercure, oxonium) ainsi zinc1, mercure1 et oxonium1 sont les ressources de la place 1 ...

Si tu pouvais m'aider à mieux constituer ma table stp

Sinon j'aurais une autre question, j'ai fait un essai de requête que je compte appliqué à beaucoup d'autres si elle convient (en fait je récupère un paquet d'information provenant de la table planète ayant pour id_joueur l'id du pseudo du joueur dans la table joueurs) :

Code : Tout sélectionner

$retour = mysql_query('SELECT UNIX_TIMESTAMP(p.timestamp), p.zinc, p.mercure, p.oxonium, p.uranium, p.mine_zinc, p.mine_mercure, p.mine_oxonium, p.mine_uranium, p.centrale_oxonium, p.depot_zinc, p.depot_mercure, p.depot_oxonium, p.depot_uranium, p.pourcentage_zinc, p.pourcentage_mercure, p.pourcentage_oxonium, p.pourcentage_uranium, p.centrale_condensation, p.station_solaire, p.tmin, p.tmax FROM planetes p join joueurs j on p.id_joueur=j.id WHERE j.pseudo=\''.$pseudo.'\'');
Merci à tous de m'aider et bonne fêtes !