Optimiser une requête SQL pour PHP [Résolu]

Utilisateur anonyme - 3 mars 2014 à 16:36 - Dernière réponse :  Utilisateur anonyme
- 3 mars 2014 à 17:00
Bonjour,

Je viens de gérer un petit système de news.

A savoir, une news comporte un service et une date, et optionnellement une heure (pour les rendez-vous).

Mes tables
services (id, nom)

actualites (id, date, heure, actu, service)

Ce que j'obtiens
ACHATS
une première actu

COMMERCIAL
une autre

ENGINEERING
encore une autre

	
ENGINEERING
09:00 : Premier rdv

	
RESSOURCES HUMAINES
09:00 : Deuxième rdv

SERVICE CLIENT
et les autres actus

Ce que j'aimerais

Si vous regardez le paragraphe au-dessus, vous voyez deux fois ENGINEERING, et je voudrais optimiser tout ça pour ne voir qu'une seule fois le service pour les deux actus qui le concernent.

Ais-je été claire ? ^^

PHP

/**
	 * Lister les actualités par jour
	 *
	 * @param 	jour 	Date au format Y-m-d
	 * @return			Un tableau d'actualités
	 */
	function listerActualites ($jour, $service='')
	{
		global $bdd;
		$suite = '';
		
		try
		{
			if ($service!='')
			{
				$suite = "AND actualites.service = '$service'";
			}

			$req = $bdd ->prepare("SELECT actualites.id, date, heure, actu, nom, service FROM actualites, services where actualites.service = services.id and date='$jour' $suite order by nom, heure");
			$req->execute();
			$actus = $req->fetchAll(); 
			nouveauLog (date("Y-m-d H:i:s"), "OK", "","fonction listerActualites");
		}
		catch(Exception $e)
		{
			die (nouveauLog (date("Y-m-d H:i:s"), "NOK", $e->getMessage() ,"fonction listerActualites"));
		}	
		
		return $actus;
	}
/**
	 * Liste les Services
	 *
	 * @return 				Un Tableau de services
	 */
	function listerServices ()
	{
		global $bdd;
		$req = $bdd ->prepare("SELECT * FROM services ORDER BY nom");
		$req->execute();
		$resultats = $req->fetchAll();
		return $resultats;
	}


La page ...
<table>
	<?php
	$compteur=0;
	foreach($services as $unService) 
	{
		$listeActusAgenda = $actusAgenda->listerActualites ($dateSQL, $unService['id']);

		foreach($listeActusAgenda as $uneActu) 
		{		
			if (strstr($uneActu['actu'], "Réunion"))
			{
				$image = '<img src="vue/css/images/reunion.jpg" />';
			}
			else if (strstr($uneActu['actu'], "Visite"))
			{
				$image = '<img src="vue/css/images/visite.jpg" />';
			}
			else if (strstr($uneActu['actu'], "Comité Entreprise"))
			{
				$image = '<img src="vue/css/images/ce.jpg" />';
			}
			else if ($uneActu['heure']!='')
			{
				$image = '<img src="vue/css/images/default.jpg" />';
			}
			else
			{
				$image = "";
			}
									
			if ($uneActu['service'] == $unService['id'])
			{
				echo '<tr><td>'.$image.'</td><td>';
			        echo '<h2><b>'.$unService['nom'].'</h2></b>';
				if ($uneActu['heure']==null)
				{
					echo nl2br($uneActu['actu']) .'<br><br>';
				}
				else
				{
					echo '<b>'.$uneActu['heure'] . '</b> : ' . $uneActu['actu'] .'<br><br>';
				}
			}
			$compteur++;
			echo '</td></tr>';
		}
	}
							
	if ($compteur==0)
	{
		echo 'Aucune actualité.';
	}
?>
</table>


Merci par avance ...
Je suis persuadée que ce n'est pas grand chose, mais à force je m'y perd :)

AsrahZarh
Afficher la suite 

2 réponses

Répondre au sujet
jordane45 19317 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 décembre 2017 Dernière intervention - 3 mars 2014 à 16:53
+1
Utile
1
Bonjour,

Je ne pense pas que ce soit une optimisation de ta requête qu'il te faille...

Il faut juste que lorsque tu parcours tes enregistrements (dans ton code PHP) tu vérifie si le service est le même que le précédent.

Si le nom du service = le nom du service précédent alors tu n'écris que son détail..
Sinon.. tu écris le nom du service...

un truc du genre :

<?php
	$compteur=0;
        $servPrec="";
foreach($services as $unService) 

// ....

if ($uneActu['service'] == $unService['id']){
    if($unService['nom']!=$servPrec){
	echo '<tr><td>'.$image.'</td><td>';
	echo '<h2><b>'.$unService['nom'].'</h2></b>';
      }
		if ($uneActu['heure']==null){
			echo nl2br($uneActu['actu']) .'<br><br>';
		}else	{
			echo '<b>'.$uneActu['heure'] . '</b> : ' . $uneActu['actu'] .'<br><br>';
		}
$servPrec=$unService['nom'];
}



Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.