Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/04/2012, 16h39   #1
erox44
Membre actif
 
Homme
Développeur Web
Inscription : avril 2007
Messages : 357
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2007
Messages : 357
Points : 164
Points : 164
Par défaut question d'optimisation[group by/ order by/ vue]

Bonjour à tous,

voic dejà le contexte:

Sur l'une de mes pages php, je fais une requete avec un GROUP BY sur environ 10-15 champs, tous ceux qui me renvoient plus de 2 lignes, sont ensuite affichés sur un formulaire via une boucle foreach.(chaque ligne = une ligne de tableau par exemple)

Par soucis d'opitmisation, et vu que mon formulaire met 5-10s à se charger pour l'instant, je me demandais quelle serait la solution la mieux à savoir:

- conserver ce group by + having > 2
- remplacer le group by par un order by sur les mêmes champs, on boucle sur chaque ligne, tant que la ligne courante est égale à la ligne précédente ça reste le meme element du tableau(<TR>) sinon , nouveau <TR>.
- soit, créer une vue contenant le group by initial, et appeler cette vue dans mon php.



En esperant avoir été assez clair, merci
__________________
L'intelligence c'est comme la confiture, moins tu en as , plus tu l'étales...
erox44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2012, 18h02   #2
Fabllot
Membre expérimenté
 
Inscription : mai 2006
Messages : 506
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 506
Points : 582
Points : 582
Bonjour,

Ta table contient combien d'entrée ? Parce-que s'il y en a que 10-15, je ne pense pas que ce soit la requête sql qui pose problème, du moins pas le "GROUP BY"... Mais si tu mets ta requête, on peut éventuellement être plus précis.
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2012, 09h34   #3
erox44
Membre actif
 
Homme
Développeur Web
Inscription : avril 2007
Messages : 357
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2007
Messages : 357
Points : 164
Points : 164
Hello,
voici ma requete :
Code :
1
2
3
4
5
6
7
8
9
10
11
select factm_exploite_par, fact_adm_os, sauvegarde_donnees, secours_inst_sys_remunere, service_dispo, service_admin, sensi_serv, rs.projet_sous_controle, rs.plage_service_pco, rs.dispo_renforcee, rs.taux_dispo_renforcee, co.nom_const, pco.nom_pco, rs.ADMIN_DELEGUEE, count(*) 
from REF_SERVEUR rs,REF_MACHINE rm,REF_MODELE mo,REF_CONSTRUCTEUR co,REF_PCO pco 
where (rs.pk_machine = rm.pk_machine) 
AND (rm.pk_modele = mo.pk_modele) 
AND (mo.pk_const = co.pk_const) 
AND (rs.pk_nom_pco = pco.pk_pco (+)) 
AND (rs.statut = 'ACTIF') 
AND (infog_classe = 'SERVEUR') 
AND (grp_instance_sys = 1 ) 
group by factm_exploite_par, fact_adm_os, sauvegarde_donnees, secours_inst_sys_remunere, service_dispo, service_admin, sensi_serv, rs.projet_sous_controle, rs.plage_service_pco, rs.dispo_renforcee, rs.taux_dispo_renforcee, co.nom_const, pco.nom_pco, rs.ADMIN_DELEGUEE 
HAVING count(*) > 2

Sachant que par exemple, la table serveur comporte 19000 lignes, la table machine 12000 :p
__________________
L'intelligence c'est comme la confiture, moins tu en as , plus tu l'étales...
erox44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 10h05   #4
Fabllot
Membre expérimenté
 
Inscription : mai 2006
Messages : 506
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 506
Points : 582
Points : 582
Citation:
Envoyé par erox44 Voir le message
Sachant que par exemple, la table serveur comporte 19000 lignes, la table machine 12000 :p
Dans ce cas deux conseils :
  1. Explose ta requête en plusieurs plusieurs requêtes. D'expérience, il vaut mieux des boucles en php avec de petites requêtes, qu'une seule grosse requête.
  2. Utilise des JOIN
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h08.


 
 
 
 
Partenaires

Hébergement Web