Besoin conseil pour recherche multicritères d'utilisateurs
Posté : 10 janv. 2011, 13:28
Bonjour,
Voilà mon problème j'essaie de mettre dans mon site une recherche multicritères des utilisateurs. ex: par age, genre, goûts musicaux, loisir....
Voilà comment j'ai organisé ma table. 3 colonnes: id/cat/value
id= id de l'utilisateur
cat= catégorie rechercher (ex: 1 =age, 3=goûts musicaux....)
value= value de la sous-catégorie (1= jazz, 2= rock....)
J'ai choisi cette solution, plutôt que de créer une ligne par utilisateur avec toutes les sous-catégories, de cette façon si dans le futur je dois ajouter des sous-catégories je n'aurais pas besoin d'ajouter de nouvelles colonnes.
Voilà à quoi ressemble une requête:
J'ai essayé plusieurs combinaisons d'index. Clé primaire sur id/cat/value ou clé primaire sur id index sur cat/value ....
Donc je voulais savoir si d'après vous je m'y prend de la bonne manière.
PS: je suis sur Mysql
Voilà mon problème j'essaie de mettre dans mon site une recherche multicritères des utilisateurs. ex: par age, genre, goûts musicaux, loisir....
Voilà comment j'ai organisé ma table. 3 colonnes: id/cat/value
id= id de l'utilisateur
cat= catégorie rechercher (ex: 1 =age, 3=goûts musicaux....)
value= value de la sous-catégorie (1= jazz, 2= rock....)
J'ai choisi cette solution, plutôt que de créer une ligne par utilisateur avec toutes les sous-catégories, de cette façon si dans le futur je dois ajouter des sous-catégories je n'aurais pas besoin d'ajouter de nouvelles colonnes.
Voilà à quoi ressemble une requête:
SELECT * FROM `user` WHERE (cat =3 AND val IN (1, 2, 3, 5 )) OR (cat =4 AND val =6 )
GROUP BY id HAVING COUNT( id ) =5
Mon problème c'est dès que j'arrive à plus d'un million de lignes dans ma table la requête devient très longue (environ 10 sec), et si j'ajoute plus de critères à ma requête c'est encore pire.J'ai essayé plusieurs combinaisons d'index. Clé primaire sur id/cat/value ou clé primaire sur id index sur cat/value ....
Donc je voulais savoir si d'après vous je m'y prend de la bonne manière.
PS: je suis sur Mysql