Réunir 8 requetes sql en une seule
6 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Réunir 8 requetes sql en une seule
Bonjours, j'ai une page qui utilise beaucoup trop de ressources sql.
En effet j'ai 8 requêtes, qui d'après ce qu'on m'a dit, peuvent être réuni en une seule.
Mais je n'arrive pas à faire avec des jonctions.
Quelqu'un peut t'il me renseigner?
Merci
En effet j'ai 8 requêtes, qui d'après ce qu'on m'a dit, peuvent être réuni en une seule.
Mais je n'arrive pas à faire avec des jonctions.
Quelqu'un peut t'il me renseigner?
Merci
- 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);
//Recupération des autres joueurs
$playersquery = doquery("SELECT id, charname, avatar, longitude, latitude FROM {{table}} WHERE longitude between $x_start and $x_end AND latitude between $y_start and $y_end AND id!='$userrow[id]' AND UNIX_TIMESTAMP(onlinetime) >= '".(time()-120)."' AND (currentaction='En exploration' OR currentaction='En combat') ORDER BY longitude DESC,latitude DESC LIMIT 48", "users");
while ($playersrow = mysql_fetch_assoc($playersquery)) {
if (empty($TabMAP3[$playersrow['longitude']][$playersrow['latitude']]))
$TabMAP3[$playersrow['longitude']][$playersrow['latitude']] = $playersrow['avatar'];
$TabMAP4[$playersrow['longitude']][$playersrow['latitude']] = $playersrow['charname'];
}
mysql_free_result($playersquery);
-

Rod la Kox - WRInaute accro

- Messages: 1812
- Inscription: Mar Juin 24, 2008 15:03
Pourquoi ne demandes tu pas à celui qui te l'a dit ?
olaaa ce genre de requête doit consommer un max de ressources !
Une idée comme ça, dites-moi si je me trompe mais ... pourquoi ne pas se diriger vers la création d'une table virtuelle qui aura pour vocation de récupérer tous tes éléments?
AVANTAGE :
1 porte d'entrée = 1 seule requête sql sur cette table virtuelle = 1 porte de sortie
RESULTAT : Gain des ressources + accélération des traitements sql + risque minimiser des erreurs de traitements internes sql
PS : en lui mettant une procédure stockée pour la mise à jour quotidienne de tes données ou via une tâche cron...
Je suis dans le faux?
Une idée comme ça, dites-moi si je me trompe mais ... pourquoi ne pas se diriger vers la création d'une table virtuelle qui aura pour vocation de récupérer tous tes éléments?
AVANTAGE :
1 porte d'entrée = 1 seule requête sql sur cette table virtuelle = 1 porte de sortie
RESULTAT : Gain des ressources + accélération des traitements sql + risque minimiser des erreurs de traitements internes sql
PS : en lui mettant une procédure stockée pour la mise à jour quotidienne de tes données ou via une tâche cron...
Je suis dans le faux?
Bonsoir,
à moins de jouer avec des tables MERGE et/ou d'y aller à coup d'UNION/UNION ALL, difficile de tout regrouper. Mais le gain ne sera pas folichon non plus je pense.
Dans tous les cas ce genre de requête n'a pas de raison d'être "hyper consommateur" dès lors que tu ais un index double sur longitude + latitude (dans cet ordre, à cause de tes order by). Non ?
à moins de jouer avec des tables MERGE et/ou d'y aller à coup d'UNION/UNION ALL, difficile de tout regrouper. Mais le gain ne sera pas folichon non plus je pense.
Dans tous les cas ce genre de requête n'a pas de raison d'être "hyper consommateur" dès lors que tu ais un index double sur longitude + latitude (dans cet ordre, à cause de tes order by). Non ?
6 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
Consultez la description détaillée des produits ou services de Google suivants : Google Trends Recherche Personnalisée
- Analyse de positionnement sur les data centers de Google
Cet outil vous permet d'afficher sur une seule page les résultats Google effectués sur de nombreux data centers (centres de données).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité



le forum