07-01-2008, 06:21 PM
Bonjour à tous,
Cela fait un moment que sa me turlipine, et soucieux d'optimise un peu mon site (enfin c'est surtout en regardant les graphique d'utilisation du serveur ) j'ai un peu regarder les topic de jeuPHP et je me suis renseigner.
J'ai vut qu'il était largement déconseiller de faire des requêtes dans des boucles (au final c'est largement conpréhensible :mauvais.
Et horreur pour moi, j'en fait beaucoup trop. Seulement je n'arrive pas a trouver un moyen de les enlever des boucles, je m'adresse donc a vous.
j'ai 2 tables: monstre et users. La première contient toute les donnée des monstres (niveau, caractéristique, etc...) et la seconde, toute les données des joueurs (Dur :good.
Voici leurs structures:
Users:
Monstre:
Pour afficher les monstre et les joueurs sur la map, je récupère les positions:
Cela fait un moment que sa me turlipine, et soucieux d'optimise un peu mon site (enfin c'est surtout en regardant les graphique d'utilisation du serveur ) j'ai un peu regarder les topic de jeuPHP et je me suis renseigner.
J'ai vut qu'il était largement déconseiller de faire des requêtes dans des boucles (au final c'est largement conpréhensible :mauvais.
Et horreur pour moi, j'en fait beaucoup trop. Seulement je n'arrive pas a trouver un moyen de les enlever des boucles, je m'adresse donc a vous.
j'ai 2 tables: monstre et users. La première contient toute les donnée des monstres (niveau, caractéristique, etc...) et la seconde, toute les données des joueurs (Dur :good.
Voici leurs structures:
Users:
Code :
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`pseudo` text NOT NULL,
`password` text NOT NULL,
`forceu` int(11) NOT NULL,
`dexterite` int(11) NOT NULL,
`endurance` int(11) NOT NULL,
`pouvoir` int(11) NOT NULL,
`PO` int(11) NOT NULL,
`PV` int(11) NOT NULL,
`exp` int(11) NOT NULL,
`niv` int(11) NOT NULL,
`lieu` text NOT NULL,
`quartier` text NOT NULL,
`avatar` text NOT NULL,
`arme` text NOT NULL,
`armure` text NOT NULL,
`jambe` text NOT NULL,
`tete` text NOT NULL,
`bouclier` text NOT NULL,
`gant` text NOT NULL,
`PA` int(11) NOT NULL,
`tempsPA` int(11) NOT NULL,
`mail` text NOT NULL,
`orientation` text NOT NULL,
`map` text NOT NULL,
`guilde` text NOT NULL,
`profil` text NOT NULL,
`statut` smallint(6) NOT NULL,
`suspent` text NOT NULL,
`offrande` int(11) NOT NULL,
`resurection` text NOT NULL,
`reg` smallint(6) NOT NULL,
`groupe` text NOT NULL,
`messA` text NOT NULL,
`position` int(11) NOT NULL,
`PM` smallint(6) NOT NULL,
`tempsPM` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `position` (`position`),
KEY `statut` (`statut`),
FULLTEXT KEY `pseudo` (`pseudo`),
FULLTEXT KEY `lieu` (`lieu`),
FULLTEXT KEY `quartier` (`quartier`),
FULLTEXT KEY `arme` (`arme`),
FULLTEXT KEY `armure` (`armure`,`jambe`,`tete`,`bouclier`,`gant`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;
Monstre:
Code :
CREATE TABLE `monstre` (
`id` int(11) NOT NULL auto_increment,
`lieu` text NOT NULL,
`quartier` text NOT NULL,
`nom` text NOT NULL,
`niveau` int(11) NOT NULL,
`forceu` int(11) NOT NULL,
`endurance` int(11) NOT NULL,
`dexterite` int(11) NOT NULL,
`pouvoir` int(11) NOT NULL,
`PV` int(11) NOT NULL,
`armure` int(11) NOT NULL,
`image` text NOT NULL,
`reg` mediumint(9) NOT NULL,
`degat_min` int(11) NOT NULL,
`degat_max` int(11) NOT NULL,
`position` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `position` (`position`),
FULLTEXT KEY `lieu` (`lieu`,`quartier`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=20235 ;
Pour afficher les monstre et les joueurs sur la map, je récupère les positions:
Code PHP :
<?php
//Tableau des joueurs
$tab_pos = array();
$sql = mysql_query('SELECT position FROM users WHERE lieu=\''.$lieu.'\' AND quartier=\''.$quartier.'\' AND statut=\'1\'') or die(mysql_error());
while ($a = mysql_fetch_assoc($sql))
{ array_push($tab_pos,$a['position']); }
//Tableau des monstres
$sql = mysql_query('SELECT position FROM monstre WHERE lieu=\''.$lieu.'\' and quartier=\''.$quartier.'\'') or die(mysql_error());
while ($monstre_info = mysql_fetch_assoc($sql))
{ array_push($tab_pos,$monstre_info['position']); }
Problème: je doit faire une requête suplémantaire dans ma boucle pour récupérer le reste des informations du joueur/monstre:
Code PHP :
<?php
function create_profil_monstre($id_monstre)
{
$monstre = mysql_query('SELECT id,nom,niveau,lieu,PV,armure,image FROM monstre WHERE id=\''.$id_monstre.'\'') or die(mysql_error());
$donnees = mysql_fetch_assoc($monstre);
$idcible = $donnees['id'];
$nomcible = $donnees['nom'];
$niveaucible = $donnees['niveau'];
$lieucible = $donnees['lieu'];
$PVcible = $donnees['PV'];
$armurecible = $donnees['armure'];
$imagecible = $donnees['image'];
$sql = mysql_query('SELECT PV FROM listemonstre WHERE nom=\''.$nomcible.'\'') or die(mysql_error());
$recuppv = mysql_fetch_assoc($sql);
$PVrecup = $recuppv['PV'];
$profil = '['.$idcible.'] '.$donnees['nom'].'<br /><img src='.$imagecible.' width=50 height=50 /><br /> Niveau: '.$niveaucible.' <br /> PV: '.$PVcible.'/'.$PVrecup.' <br /> Etat: ';
$etatduperso = mysql_query("SELECT etat FROM etat WHERE joueur='$idcible'") or die(mysql_error());
while($etatt = mysql_fetch_assoc($etatduperso))
{
$profil .= '<br />'.addslashes($etatt['etat']);
}
return $profil;
}