Besoin d'optimiser une requête!

BFH
Eléphant du PHP | 214 Messages

27 avr. 2005, 16:11

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?
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

ViPHP
ViPHP | 2144 Messages

27 avr. 2005, 16:28

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.

BFH
Eléphant du PHP | 214 Messages

27 avr. 2005, 16:36

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
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

ViPHP
ViPHP | 2144 Messages

27 avr. 2005, 16:39

Ok, mais tu veux les afficher comment toutes les catégories à la suite ? dans des tableaux séparés ? donnes nous plus d'infos ...

ViPHP
ViPHP | 1380 Messages

27 avr. 2005, 16:44

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'
)";
ripat

BFH
Eléphant du PHP | 214 Messages

27 avr. 2005, 16:47

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?
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 avr. 2005, 18:05

$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 ?