IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Cherche requête efficace pour ma question


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut Cherche requête efficace pour ma question
    Bonjour,

    Je cherche a créer une requete SQL la plus efficace possible. Je ne demande pas qu'on me donne le code "tout cuit" mais plutôt qu'on me dise comment vous feriez (en français) pour faire de telles requetes.

    Soit un élément, décrit par 5 attributs parmi 292.

    L'utilisateur décide, via un formulaire et pour chaque attribut de mettre "oui" ou "non" a chaque attribut.
    Pour chaque utilisateur sont donc créés et stockés, pour "oui", et pour "non", deux tableaux contenant les identifiants BDD des attributs correspondants.

    A partir de ça, je propose aux utilisateurs de voir les éléments en fonction d'un pourcentage de correspondance, c'est à dire :
    . correspondance 100% = ramener tous les éléments dont les 5 attributs sont dans le tableau "oui"
    . correspondance 80% = ramener tous les éléments qui ont 4 attributs repris dans le tableau "oui" et 1 dans le tableau "non"
    . correspondance 60% = tous les éléments qui ont trois attributs "oui" et 2 "non"
    . correspondance 40%

    J'ai donc créé 4 requêtes dynamiques en PHP qui cherchent les éléments correspondants à chaque correspondance :
    . correspondance 100% (facile) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...] WHERE attribut 1 IN (liste_oui) AND attribut 2 IN (liste_oui) AND attribut 3 IN (liste_oui) AND attribut 4 IN (liste_oui) AND attribut 5 IN (liste_oui)
    ce sont pour les autres correspondances que je trouve que mes requêtes pourraient être plus efficaces :
    . correspondance 80% :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...] WHERE (attribut 1 IN (liste_oui) AND attribut 2 IN (liste_oui) AND attribut 3 IN (liste_oui) AND attribut 4 IN (liste_oui) AND attribut 5 IN (liste_non)) OR (attribut 1 IN (liste_oui) AND attribut 2 IN (liste_oui) AND attribut 3 IN (liste_oui) AND attribut 4 IN (liste_non) AND attribut 5 IN (liste_oui)) OR (attribut 1 IN (liste_oui) AND attribut 2 IN (liste_oui) AND attribut 3 IN (liste_non) AND attribut 4 IN (liste_oui) AND attribut 5 IN (liste_oui)) OR (attribut 1 IN (liste_oui) AND attribut 2 IN (liste_non) AND attribut 3 IN (liste_oui) AND attribut 4 IN (liste_oui) AND attribut 5 IN (liste_oui)) OR (attribut 1 IN (liste_non) AND attribut 2 IN (liste_oui) AND attribut 3 IN (liste_oui) AND attribut 4 IN (liste_oui) AND attribut 5 IN (liste_oui))
    . correspondance 60% : même principe mais il faut 2 attributs dans la liste non donc ça fait 10 possibilités
    . correspondance 40% : même principe, 10 possibilités

    La requête générée pour 80%, 60% et 40% est énorme et surtout lente a exécuter.

    Comment feriez-vous ?

    Merci d'avance pour toute piste

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par nico1214 Voir le message
    L'utilisateur décide, via un formulaire et pour chaque attribut de mettre "oui" ou "non" a chaque attribut.
    Plutôt que de faire des OR, pourquoi ne pas construire ta requête dynamiquement côté applicatif en commençant par WHERE 1=1 pour pas te galérer à gérer quand mettre un AND ou pas.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Salut,

    C'est à dire ?

    L'utilisateur remplit le formulaire sur une page. Il le modifie quand il veut.

    Quand il le veut toujours, il va consulter la liste des éléments.

    A quel moment veux-tu que je construise la requête dynamiquement ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Bon enfait j'avais pas bien compris que 80% c'était obligatoirement les 4 OR, je pensais que 4 d'entre eux ne renvoyaient pas de données et que seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    attribut 1 IN (liste_oui)
    AND attribut 2 IN (liste_non)
    AND attribut 3 IN (liste_oui)
    AND attribut 4 IN (liste_oui)
    AND attribut 5 IN (liste_oui)
    par exemple allait te renvoyer des données, d'où ma proposition

    Concernant les perfs, quels sont les index présents sur la table et qu'elle est sa volumétrie.

    Citation Envoyé par nico1214 Voir le message
    Soit un élément, décrit par 5 attributs parmi 292.
    Ca veut dire que tu as 292 colonnes ?

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    J'ai 292 LIGNES dans une table d'attributs qui décrivent chaque attributs.

    Dans le formulaire, j'affiche tous les attributs (pas les 292 en entier car ils sont quand même "rangés" par thèmes).
    Pour chaque attribut (par défaut à oui) je récupère le choix de l'utilisateur. Je crée un tableau avec les "oui", un tableau avec les "non". Je sérialize les deux tableaux et je les stocke en base : soient deux colonnes.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2015, 20h44
  2. Réponses: 3
    Dernier message: 14/02/2015, 19h17
  3. Réponses: 8
    Dernier message: 17/01/2014, 15h41
  4. Réponses: 4
    Dernier message: 23/12/2010, 14h43
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo