Page 1 sur 1

Besoin d'optimiser une requête!

Posté : 27 avr. 2005, 16:11
par BFH
Bonjour, je voudrais savoir si il y avait un moyen d'optimiser ce qui suit :
$query="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Ordinateur\" ";
$query1="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Carte Mère\" ";
$query2="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Moniteur\" ";
$query3="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Multimédia\" ";
$query4="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Stockage\" ";
$query5="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Partitions\" ";
$query6="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Entrée\" ";
$query7="SELECT * FROM item WHERE ReportID=\"$P\"&& IPage=\"Résumé\"&& IGroup=\"Réseaux\" ";
Ou bien d'optimiser cela:
$result1=mysql_query($query1)or die (mysql_error());
$result2=mysql_query($query2)or die (mysql_error());
$result3=mysql_query($query3)or die (mysql_error());
$result4=mysql_query($query4)or die (mysql_error());
$result5=mysql_query($query5)or die (mysql_error());
$result6=mysql_query($query6)or die (mysql_error());
$result7=mysql_query($query7)or die (mysql_error());
Est ce qu'on peut utiliser une boucle for ou qqch dans le genre, et comment faire aussi?

Posté : 27 avr. 2005, 16:28
par iclo
Pauvre serveul sql :( :( :(
Il faudrait surtout optimiser le tout en ne faisant qu'une seule requêtte sql.
Il nous faudrait des détails sur ce que tu fais de ces données à les récuperées.

Posté : 27 avr. 2005, 16:36
par BFH
Moi je demande pas mieux que de n'avoir qu'une requête au lieu de tout cela! C'est d'ailleurs l'objectif de mon post! :D

Les données que je recupère je les affiche dans un tableau :
<TABLE border="0" width="100%">
<?
while($row=mysql_fetch_assoc($result))
{
?>
<TR>
<TD> <?=$row["IField"];?> </TD>
<TD> <?=$row["IValue"];?> </TD>
</TR>
<?
}
?>

</TABLE>
Et il faudrait que je fasse cela pour chaque $query

Posté : 27 avr. 2005, 16:39
par iclo
Ok, mais tu veux les afficher comment toutes les catégories à la suite ? dans des tableaux séparés ? donnes nous plus d'infos ...

Posté : 27 avr. 2005, 16:44
par Ripat
Si ta variable $P ne change pas, que penses-tu de ceci:
$query = "
SELECT *
FROM item
WHERE ReportID='$P' AND IPage='Résumé' AND
(
  IGroup='Ordinateur' OR 
  IGroup='Carte Mère' OR
  IGroup='Moniteur' OR
  IGroup='Multimédia' OR
  IGroup='Stockage' OR
  IGroup='Partitions' OR
  IGroup='Entrée' OR
  IGroup='Réseaux'
)";

Posté : 27 avr. 2005, 16:47
par BFH
Je desirerais obtenir si possible un truc du genre :
Ordinateur :
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue



Carte Mère :
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue
Les valeurs IField et les valeurs IValue

etc...
Voila si c'est possible bien sur!
D'avance merci.

Ripat : Je trouve ta formulation très bien mais est ce que cela me permet de mettre en forme comme je le souhaiterais?

Re: Besoin d'optimiser une requête!

Posté : 27 avr. 2005, 18:05
par albat
$query = "SELECT * FROM item WHERE ReportID='".$P."' AND IPage='Résumé' AND IGroup IN ('Ordinateur', 'Carte Mère', 'Moniteur', 'Multimédia', 'Stockage', 'Partitions', 'Entrée', 'Réseaux')";
$result = mysql_query($query) or die(mysql_error());
Bien qu'imparfaite, cette écriture simplifie quand même pas mal de choses, non ?