Page 1 sur 1

Petit brainstorming ! comment pondre cet algo pour mes table

Posté : 23 juin 2009, 00:59
par Nico
Bonjour,

J'explique ce que je veut obtenir et la forme de mes tables.
Je souhaite faire ce principe :
Image

C'est d'ailleurs déjà en place, mais je pense que je peux l'optimisé coté requetes..

Actuellement, j'ai 5 tables : categories, ss_categories, marques, modeles et annonces

annonces a un id parent de modeles
modeles -> marques
marques -> ss_cat
ss_cat -> cat

pour recuperer le nbre d'annonces pour les cats, je fais ca

Code : Tout sélectionner

SELECT cat.id AS id,cat.nom AS nom,COUNT(a.id) AS nbre_annonce FROM categories cat LEFT JOIN ss_categories ss_cat ON categorie_id = cat.id LEFT JOIN marques m ON ss_categorie_id = ss_cat.id LEFT JOIN modeles mo ON marque_id = m.id LEFT JOIN annonces a ON modele_id = mo.id GROUP BY cat.id ORDER BY cat.id ASC
Ca marche bien, mais je trouve ca lourd..

ET c'est la que l'on m'a proposé une idée, je sais pas ce qu'elle vaut mais je l'a trouve pas idiote.

Faire le principe d'une pyramide, calculer a l'envers le nbre d'annonces de chaque modeles, et ensuite, faire des additions par PHP pour remonter le chiffre jusqu'aux cats.
Est ce mieux ? si oui, je n'ai aucune idée de la marche ç suivre et a prendre pour pondre ce genre d'algo.

Merci d'avance.

Posté : 23 juin 2009, 08:04
par Nagol
pour faire de la perf et de l'algo, tu as juste à savoir plusieurs choses:

les allocations mémoires sont couteuses: donc limite le nombre de variables, ainsi que leur taille
chaque opération a son coût: chaques choses dans un programme prend du temps, moins il y a de choses moins ca prendra de temps

ceci étant dit, vu que tu utilises un sgbd, c'est le meme principe pour lui, il est capable de faire des opérations internes de facon plus perfomante qu'un équivalent php, et le faite de requêter beaucoup c'est pas génial non plus.

en appliquant tous ces principes je pense que tu dois pouvoir déterminer (et bencher à coup de microtime) la meilleure façon de résoudre ton problème.

Posté : 23 juin 2009, 11:00
par Nico
OK je te remercie pour cet éclaircissement coté PHP/Mémoire.

Je pense pas pouvoir bcp plus optimisé, les index sont en places, j'utilise PDO avec prepare, donc je pense être pas trop mal.
Restera à mettre en place un cache fichier si besoin.

J'aurai pensé que php allait être plus rapide, donc finalement je change rien :wink: