Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2008, 16h35   #1
Membre éclairé
 
Avatar de mdr_cedrick
 
Développeur multimédia
Inscription : janvier 2008
Messages : 375
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : janvier 2008
Messages : 375
Points : 305
Points : 305
Par défaut [Tableaux] optimisation pour grosse quantité

bonjour à tous

je récupère de différentes tables des données (n° de cadeau et quantité)
j'insère le tout dans un tableau et je tri le tableau de manière à savoir quels sont les cadeaux les plus commandés
voici mon code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$sql = $ewp->sqlQuery	("SHOW TABLE STATUS FROM commandes");
while ($o = $ewp->sqlGetObj($sql))
{
	$sql2	=	 $ewp->sqlQuery ("SELECT kdo, qte, points, commande FROM commandes.".$o->Name."");
	while ($o2 = $ewp->sqlGetObj($sql2))
	{
		//... du code pour faire des stats....
 
		//PARTIE QUI NOUS INTERESSE - ajout de la quantité pour calculer le classement par articles
		for ($j=0; $j < $o2->qte; $j++)
			array_push	($tab, $o2->kdo);
	}
}
 
//tri du tableau par nombre de kdo
$tabKDO	=	array_count_values($tab);
//ajoute dans un tableau pour trier
foreach($tabKDO as $cle=>$valeur)
    $tab[]	=	array("nb" => $valeur, "kdo" => $cle);
//tri du tableau en décroissant
rsort($tab);
cela fonctionne très bien
sauf que d'ici très peu de temps j'aurai surement des milliers voir des centaines de milliers de lignes et j'ai peur que ma façon de trier soit un peu larguée une fois que j'aurai des grosses quantités

j'aimerai donc savoir si vous auriez une meilleure solution à me proposer

en vous remerciant d'avance
__________________
Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière
mdr_cedrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 16h46   #2
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Salut,

si tu nous donne ton schéma de base de données, j'ose espérer et penser que l'on pourra te proposer une requete pour faire TOUT cela.

Mais là, non je ne sais pas. désolé. Et en faits je pense que ton code, c'est re faire tout ce que le SGBD sait faire mieu que toi, ou moi.

bye
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 16h58   #3
Membre éprouvé
 
Homme
Inscription : août 2006
Messages : 313
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : août 2006
Messages : 313
Points : 497
Points : 497
Oui, ORDER BY et GROUP BY beneficie de 30 d'ans d'experience en SQL.
Ton code beneficie de 10 ans d'optimisations de PHP.(ils ont interet à avoir largement dépassé le C en vitesse pour rattraper ton algorithme tres basique)

Restons serieux, tu reinventes la roue (meme je dirai la roue carrée) la.
Ce genre de resultat, MySQL est capable de te le donner tres rapidement meme sur un grand nombre de requete si :
- ton shéma de table est bon
- ta requete est bonne

Poste les 2 (en modifiant les noms et les prefixes de tables surtout, un forum c'est persistant)

On pourra surement t'aider
Phelim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 14h22   #4
Membre éclairé
 
Avatar de mdr_cedrick
 
Développeur multimédia
Inscription : janvier 2008
Messages : 375
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : janvier 2008
Messages : 375
Points : 305
Points : 305
ben le problème c'est que je ne vois pas comment en SQL on peut faire une requête de ce genre puisque l'on doit d'abord lister toutes les tables d'une base
puis ensuite pour chaque table faire le compte des cadeaux
je sais que le tri peut se faire facilement via SQL, mais moi ce qui m'embête c'est surtout cette première requête qui liste mes tables
cela ne se passerait que sur une table il n'y aurait pas soucis, mais là ...

__________________
Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière
mdr_cedrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h25   #5
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Tu as ce probleme parce que ton schema est tout pourri... Des tables dont le nom est dynamique, ca va bien a la limite pour des tables d'archivages (et encore...) mais pour des tables de travail c'est pas top.

Pourquoi pas une seule table avec un champ supplementaire qui correspondrait au contenu de $o->Name dans ton code ??
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h42   #6
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
C'est clairement pourri, et je n'osais trop y croire...
Mais rien n'empeche de construire la requete dynamiquement. Ce sera toujours plus rapide et plus optimisé que de procéder tels que tu le fais actuellement.

Sinon, une autre solution est de créer une table de travail. Cette table de travail va te servir à enregistrer les informations récoltées dans les différentes tables. Ensuite seulement tu commences à calculer ce qui t'interessent, via des requetes.
C'est ce que je fais par exemple pour des stats.
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 17h01   #7
Membre éclairé
 
Avatar de mdr_cedrick
 
Développeur multimédia
Inscription : janvier 2008
Messages : 375
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : janvier 2008
Messages : 375
Points : 305
Points : 305
je ne vais pas me justifier quand au faite d'avoir x tables et de toutes les lister, vu le projet qu'il y a avec je n'ai pas trop le choix.

Sinon je vais faire comme l'a indiqué kaymak
j'y avais déjà un peu pensé mais c'est vrai que c'est la meilleure solution, peut être plus consommatrice de place car ça demande une table en plus
mais en même temps ça m'évitera de faire une requête de m.... pour afficher les résultats

Merci à tous
__________________
Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière
mdr_cedrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 18h31   #8
Membre éprouvé
 
Homme
Inscription : août 2006
Messages : 313
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : août 2006
Messages : 313
Points : 497
Points : 497
Si tu sais a l'avance les données que tu as besoin pour ce genre de chose.

Je te conseille les triggers ça te permettrait de te sortir de ce genre de soucis de conceptions.

Quand une data est inséré dans une de tes tables, tu mets à jours une data a jour dans une de tes tables.
Ton probleme semble tomber pratiquement sous le concept de la buisness intelligence puisque tu as trop de datas pour faire des requetes sur un server de prod.
Phelim est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h48.


 
 
 
 
Partenaires

Hébergement Web