Réunir 8 requetes sql en une seule

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 1 Novembre 2008.

  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    533
    J'aime reçus:
    0
    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


    Code:
    	//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);
     
  2. Rod la Kox
    Rod la Kox WRInaute accro
    Inscrit:
    24 Juin 2008
    Messages:
    2 780
    J'aime reçus:
    0
    Pourquoi ne demandes tu pas à celui qui te l'a dit ?
     
  3. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
  4. passion
    passion WRInaute accro
    Inscrit:
    6 Janvier 2006
    Messages:
    3 925
    J'aime reçus:
    192
    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?
     
  5. Malaiac
    Malaiac WRInaute occasionnel
    Inscrit:
    4 Mai 2005
    Messages:
    266
    J'aime reçus:
    0
    @sff :
    copie colle ici le code SQL de tes tables (create table...)
    precise ce que tu veux comme resultat en sortie
    en dehors de ca, difficile de t'aider !
     
  6. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    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 ?
     
Chargement...
Similar Threads - Réunir requetes sql Forum Date
Réunir 2 requetes sql (ORDER BY ASC et DESC) Développement d'un site Web ou d'une appli mobile 29 Août 2021
Réunir 2 requêtes MySql Développement d'un site Web ou d'une appli mobile 22 Mai 2013
Réunir 2 requetes sql en une Développement d'un site Web ou d'une appli mobile 23 Novembre 2009
Réunir 2 requetes en une seule Développement d'un site Web ou d'une appli mobile 15 Mai 2010
Réunir 2 requetes similaires Développement d'un site Web ou d'une appli mobile 13 Mai 2009
Réunir 2 requetes en une seule Développement d'un site Web ou d'une appli mobile 8 Avril 2009
Réunir plusieurs Landing pages en une seule Débuter en référencement 9 Juillet 2020
Dans quelle table réunir les entreprises et associations ? Développement d'un site Web ou d'une appli mobile 2 Février 2015
Site pour réunir les pronostics entre amis Développement d'un site Web ou d'une appli mobile 7 Juillet 2014
Réunir plusieurs flux rss en un seul Développement d'un site Web ou d'une appli mobile 29 Mai 2006
réunir 2 colonne en 1 sur tableur? Le café de WebRankInfo 3 Janvier 2006
Réunir des sites et garder le PR Netlinking, backlinks, liens et redirections 16 Juillet 2005
Search Console Absence de requêtes dans la search console Problèmes de référencement spécifiques à vos sites 21 Mai 2021
Nettoyage de requètes externes de Google, comment faire? Administration d'un site Web 24 Octobre 2020
Comment se placer sur des requêtes inhabituelles dû au confinement Rédaction web et référencement 25 Mars 2020
Déclassement sur requêtes et pays spécifiques? Crawl et indexation Google, sitemaps 11 Janvier 2020
Qwant 20 milliards de requetes en 2018? 2 x plus que Google? Autres moteurs de recherche connus 2 Avril 2019
Marqueur nommé ou interrogatif pour les requetes préparées ? Développement d'un site Web ou d'une appli mobile 30 Décembre 2018
Requêtes Google search control et mots-clés de mon site Débuter en référencement 26 Novembre 2018
par quoi commencent les requêtes ? Débuter en référencement 16 Novembre 2018