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 :

Besoin de votre avis sur une méthodologie à choisir


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Besoin de votre avis sur une méthodologie à choisir
    Bonsoir,

    J'ai besoin de faire un truc, et j'aimerais bien votre avis sur la méthodologie que je pourrais choisir pour ça...

    En fait, je voudrais que dans ma table d'utilisateurs, disons utilisateurs, je puisse insérer un certain nombre de numéros pour chaque ligne. En gros chaque utilisateur pourrait avoir plusieurs numéros.

    Je pensais à un champ TEXT avec les numéros entre virgules.

    Exemple : "1,2,14,122,4995,386,22"

    Par contre, je voudrais aussi une chose, et si possible en une seule requête. Et c'est là que ça me pose des problèmes.

    En fait je voudrais pouvoir lister les X utilisateurs qui ont le plus de similitude avec les numéros d'un utilisateur donné. Par exemple un utilisateur qui aurait 3 numéros en commun serait affiché avant un autre utilisateur qui n'en aurait que deux, et ainsi de suite...

    Si quelqu'un à une idée, je suis preneur !

    Merci !

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    On gagne toujours à respecter les formes normales.
    Je te conseille donc une table contenant l'id de l'utilisateur et un numéro, les deux colonnes constituant un index UNIQUE (qui pourrait être candidat à être la clé primaire de la table) Un candidat qui a trois numéros sera donc représenté par trois lignes dans cette table, celui qui en a 12, par 12 lignes. Celui qui n'a pas de numéro n'y sera pas représenté.
    La problématique de ta requête de score de corrélation en sera grandement facilitée.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse. Ce système n'est pas bête, c'est vrai.

    Par contre, je me demande encore comment je pourrais, en une seule requête, lister les personnes qui ont le plus de correspondances.

    C'est à dire, si j'ai les numéros "1,2,14,122,4995,386,22", je voudrais que les personnes qui ont le plus de numéros en commun avec moi soient affichés avant ceux qui en ont un peu moins de pareils, etc...

    Merci !

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    Si je fais les tables suivantes, d'après l'analyse de Kris :
    utilisateurs (id_ut, nom, prenom, ...)
    ut_num (id_ut, numero)
    La requête sera, avec "moi" étant l'utilisateur 6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT U.id_ut, U.nom, U.prenom, COUNT(*) AS Nb_Corresp
    FROM utilisateurs U
      inner join ut_num UN ON U.id_ut = UN.id_ut 
    WHERE UN.numero IN (SELECT numero FROM ut_num WHERE id_ut = 6)
    GROUP BY U.id_ut, U.nom, U.prenom -- (U.nom et U.prenom  inutiles pour MySQL)
    ORDER BY COUNT(*) DESC
    Ce qui peut s'optimiser ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT U.id_ut, U.nom, U.prenom, COUNT(*) AS Nb_Corresp
    FROM utilisateurs U
      inner join ut_num UN ON U.id_ut = UN.id_ut 
      inner join ut_num Moi ON UN.numero = Moi.numero AND Moi.id_ut = 6
    GROUP BY U.id_ut, U.nom, U.prenom 
    ORDER BY COUNT(*) DESC

Discussions similaires

  1. Réponses: 15
    Dernier message: 31/05/2022, 14h50
  2. Votre avis sur une proposition de job
    Par plex dans le forum Emploi
    Réponses: 7
    Dernier message: 18/01/2007, 10h11
  3. Réponses: 6
    Dernier message: 28/02/2005, 14h32
  4. Votre avis sur une bannière animée developpez.com
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 14
    Dernier message: 02/02/2005, 07h52

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