Réduire le nombre de requêtes sql
7 messages
• Page 1 sur 1
-

sff - WRInaute occasionnel

- Messages: 336
- Inscription: 2 Fév 2005
Réduire le nombre de requêtes sql
Bonjour, je pose cette question ici parce que je ne sais vraiment plus quoi faire. C'est un problème qui traine depuis plus de 6 mois et personne n'a vraiment réussi à m'aider, moi même je n'y arrive pas.
Le but est pour simple, il faudrait réduire le nombre de requêtes dans le code ci-dessous car il y en a beaucoup trop.
Sinon il y a la fonction doquery pour ceux qui veulent plus de précisions :
La page complète est dispo ici : http://www.rpgillusion.net/game/map.txt
Voila si quelqu'un si pouvait m'aider, je lui serais vraiment reconnaissant.
Le but est pour simple, il faudrait réduire le nombre de requêtes dans le code ci-dessous car il y en a beaucoup trop.
- Code: Tout sélectionner
//Récupération élément décors.
$mapquery = doquery("SELECT longitude, latitude, pic, land FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end ORDER BY longitude DESC,latitude DESC LIMIT 48", "map");
while ($maprow = mysql_fetch_assoc($mapquery)) {
if (empty($TabMAP1[$maprow['longitude']][$maprow['latitude']]))
$TabMAP1[$maprow['longitude']][$maprow['latitude']] = $maprow['pic'];
}
mysql_free_result($mapquery);
//Récupération élément clans.
$clanquery = doquery("SELECT pic, longitude, latitude FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end ORDER BY longitude DESC,latitude DESC LIMIT 48", "clans_elements");
while ($clanrow = mysql_fetch_assoc($clanquery)) {
if (empty($TabMAP7[$clanrow['longitude']][$clanrow['latitude']]))
$TabMAP7[$clanrow['longitude']][$clanrow['latitude']] = $clanrow['pic'];
}
mysql_free_result($clanquery);
//Récupération élément villes.
$townquery = doquery("SELECT name, longitude, latitude FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end ORDER BY longitude DESC,latitude DESC LIMIT 48", "towns");
while ($townrow = mysql_fetch_assoc($townquery)) {
if (empty($TabMAP2[$townrow['longitude']][$townrow['latitude']]))
$TabMAP2[$townrow['longitude']][$townrow['latitude']] = $townrow['name'];
}
mysql_free_result($townquery);
//Récupération élément points de téléportations.
$teleportationquery = doquery("SELECT name, longitude, latitude FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end ORDER BY longitude DESC,latitude DESC LIMIT 48", "teleportations");
while ($teleportationrow = mysql_fetch_assoc($teleportationquery)) {
if (empty($TabMAP9[$teleportationrow['longitude']][$teleportationrow['latitude']]))
$TabMAP9[$teleportationrow['longitude']][$teleportationrow['latitude']] = $teleportationrow['name'];
}
mysql_free_result($teleportationquery);
//Récupération élément bureaux des colis.
$officequery = doquery("SELECT name, longitude, latitude FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end ORDER BY longitude DESC,latitude DESC LIMIT 48", "packages_offices");
while ($officerow = mysql_fetch_assoc($officequery)) {
if (empty($TabMAP8[$officerow['longitude']][$officerow['latitude']]))
$TabMAP8[$officerow['longitude']][$officerow['latitude']] = $officerow['name'];
}
mysql_free_result($officequery);
//Récupération élément coffres.
$cofferquery = doquery("SELECT name, longitude, latitude FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end ORDER BY longitude DESC,latitude DESC LIMIT 48", "coffers");
while ($cofferrow = mysql_fetch_assoc($cofferquery)) {
if (empty($TabMAP5[$cofferrow['longitude']][$cofferrow['latitude']]))
$TabMAP5[$cofferrow['longitude']][$cofferrow['latitude']] = $cofferrow['name'];
}
mysql_free_result($cofferquery);
//Récupération élément arènes.
$arenaquery = doquery("SELECT name, longitude, latitude FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end ORDER BY longitude DESC,latitude DESC LIMIT 48", "arenas");
while ($arenarow = mysql_fetch_assoc($arenaquery)) {
if (empty($TabMAP6[$arenarow['longitude']][$arenarow['latitude']]))
$TabMAP6[$arenarow['longitude']][$arenarow['latitude']] = $arenarow['name'];
}
mysql_free_result($arenaquery);
Sinon il y a la fonction doquery pour ceux qui veulent plus de précisions :
- Code: Tout sélectionner
function doquery($query, $table) {
include('config.php');
$sqlquery = mysql_query(str_replace("{{table}}", $dbsettings["prefix"] . "_" . $table, $query)) or die(mysql_error());
return $sqlquery;
}
La page complète est dispo ici : http://www.rpgillusion.net/game/map.txt
Voila si quelqu'un si pouvait m'aider, je lui serais vraiment reconnaissant.
-

YoyoS - WRInaute accro

- Messages: 3827
- Inscription: 14 Sep 2006
Encore une fois, cette question ne se serait pas posée si tu avais pris le temps d'analyser le projet et la structure des tables à utiliser.
Quand tu programmes un truc, faut avoir en permanence à l'esprit qu'il faut éviter les doublons et être le plus générique possibles. C'est quasiment que des copiés collés dans ton cas donc ça se voit qu'il y a un problème non ?
2 tables auraient suffit: ELEMENTS et TYPES pour faire tout ça en une seule requête avec une jointure. Là on peut rien faire désolé. Et rafistoler un truc qui ne tient pas debout ça n'a pas de sens :/
Quand tu programmes un truc, faut avoir en permanence à l'esprit qu'il faut éviter les doublons et être le plus générique possibles. C'est quasiment que des copiés collés dans ton cas donc ça se voit qu'il y a un problème non ?
2 tables auraient suffit: ELEMENTS et TYPES pour faire tout ça en une seule requête avec une jointure. Là on peut rien faire désolé. Et rafistoler un truc qui ne tient pas debout ça n'a pas de sens :/
-

sff - WRInaute occasionnel

- Messages: 336
- Inscription: 2 Fév 2005
suite
YoyoS je comprends ta réflexion et je serais totalement d'accords si chaque table comprenait 3 ou 4 champs sql maximum, ca aurait été plus simple de tout combiner, mais la chaque table contient entre 10 et 20 champs chacune, ca devient impossible à combiner.
-

YoyoS - WRInaute accro

- Messages: 3827
- Inscription: 14 Sep 2006
Donc il n'y a pas moyen de faire moins de requêtes alors. Peut-être faire un tableau (array) avec les noms des tables et boucler dessus en faisant la même requête, mais ça ne change rien au nombre de requêtes. C'est pas normal que tes tables fassent 20 colonnes. Je veux bien te faire une analyse vite fait si tu me fais une description complète de toute ta base, tes tables et tes champs actuels 
-

sff - WRInaute occasionnel

- Messages: 336
- Inscription: 2 Fév 2005
suite
Je peux te montrer la structure de quelques tables :
map :
`id` smallint(5) unsigned NOT NULL auto_increment,
`pic` tinyint(3) unsigned NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`latitude` smallint(6) NOT NULL default '0',
`open` tinyint(3) unsigned NOT NULL default '1',
`land` tinyint(3) unsigned NOT NULL default '1',
towns :
`id` tinyint(3) unsigned NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`innprice` tinyint(4) NOT NULL default '0',
`parchmentprice` tinyint(3) NOT NULL default '0',
`parchmentcoffers` tinyint(3) NOT NULL default '0',
`total_buy` int(11) NOT NULL default '0',
`travelpoints` smallint(5) unsigned NOT NULL default '0',
`equipslist` text NOT NULL,
`itemslist` text NOT NULL,
`hidden` tinyint(3) NOT NULL default '0',
`coords_map1`varchar(50) NOT NULL default '',
`coords_map2`varchar(50) NOT NULL default '',
`coords_map3`varchar(50) NOT NULL default '',
`coords_map4`varchar(50) NOT NULL default '',
`coords_map5`varchar(50) NOT NULL default '',
`coords_map6`varchar(50) NOT NULL default '',
package offices :
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`travelpoints` int(11) NOT NULL default '0',
`parchmentprice` int(11) NOT NULL default '0',
clans elements :
`id` tinyint(3) unsigned NOT NULL auto_increment,
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`clan` int(11) NOT NULL default '0',
`pic` varchar(30) NOT NULL default '',
`type` smallint(6) NOT NULL default '0',
coffers :
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`parchmentprice` int(11) NOT NULL default '0',
`total_buy` int(11) NOT NULL default '0',
`travelpoints` int(11) NOT NULL default '0',
`total` int(11) NOT NULL default '0',
`limit_d` int(11) NOT NULL default '0',
`total_d` int(11) NOT NULL default '0',
`total_r` int(11) NOT NULL default '0',
Mais je doute que tu sois avancé avec ca.
map :
`id` smallint(5) unsigned NOT NULL auto_increment,
`pic` tinyint(3) unsigned NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`latitude` smallint(6) NOT NULL default '0',
`open` tinyint(3) unsigned NOT NULL default '1',
`land` tinyint(3) unsigned NOT NULL default '1',
towns :
`id` tinyint(3) unsigned NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`innprice` tinyint(4) NOT NULL default '0',
`parchmentprice` tinyint(3) NOT NULL default '0',
`parchmentcoffers` tinyint(3) NOT NULL default '0',
`total_buy` int(11) NOT NULL default '0',
`travelpoints` smallint(5) unsigned NOT NULL default '0',
`equipslist` text NOT NULL,
`itemslist` text NOT NULL,
`hidden` tinyint(3) NOT NULL default '0',
`coords_map1`varchar(50) NOT NULL default '',
`coords_map2`varchar(50) NOT NULL default '',
`coords_map3`varchar(50) NOT NULL default '',
`coords_map4`varchar(50) NOT NULL default '',
`coords_map5`varchar(50) NOT NULL default '',
`coords_map6`varchar(50) NOT NULL default '',
package offices :
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`travelpoints` int(11) NOT NULL default '0',
`parchmentprice` int(11) NOT NULL default '0',
clans elements :
`id` tinyint(3) unsigned NOT NULL auto_increment,
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`clan` int(11) NOT NULL default '0',
`pic` varchar(30) NOT NULL default '',
`type` smallint(6) NOT NULL default '0',
coffers :
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`latitude` smallint(6) NOT NULL default '0',
`longitude` smallint(6) NOT NULL default '0',
`parchmentprice` int(11) NOT NULL default '0',
`total_buy` int(11) NOT NULL default '0',
`travelpoints` int(11) NOT NULL default '0',
`total` int(11) NOT NULL default '0',
`limit_d` int(11) NOT NULL default '0',
`total_d` int(11) NOT NULL default '0',
`total_r` int(11) NOT NULL default '0',
Mais je doute que tu sois avancé avec ca.
7 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Nombre moyen de mots par requête : statistiques AOL Août 2006 - 10-08-2006
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Nuage de tags Wordle pour WebRankInfo - 29-04-2009
- Le marketing viral au service du référencement - 11-10-2004
Consultez la description détaillée des produits ou services de Google suivants : Google PowerMeter, Google Web Accelerator, Google Site Stats
- Calcul du nombre de backlinks
Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées. - Analyseur de densité
Cet outil vous permet de calculer l'indice de densité d'un mot-clé d'une page web. Il est calculé à la fois pour la balise TITLE, la balise META description et l'ensemble du texte de la page.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
