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 et SQL. Discussion :

update pour resserrer les points


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut update pour resserrer les points
    Salut. Voici ma question : j'ai un champ points(numérique) dans ma table personnes et j'aimerais faire un update de ce champ pour que les points des différentes personnes se resserrent à un point de différence tout en gardant l'ordre initial par points.

    La solution trouvée jusqu'ici est la suivante mais ça m'affiche une erreur: "L'opération doit utiliser une requête qui peut être mise à jour."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE personnes SET position = (
        SELECT (SELECT COUNT(position) FROM personnes AS tableAlias WHERE position <  personnes.position)+1 AS Classement
        FROM personnes
        ORDER BY position;
    )
    ...et pourtant la requête SELECT me renvoie bien une suite correcte.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par pipoket Voir le message
    Salut. Voici ma question : j'ai un champ points(numérique) dans ma table personnes et j'aimerais faire un update de ce champ pour que les points des différentes personnes se resserrent à un point de différence tout en gardant l'ordre initial par points.
    Excuses moi, mais je n'ai rien compris, je ne pense pas être le seul.

    Pourrais-tu détailler un peu plus (avec des données en entrée et en sortie comme exemple).

    Starec

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut détails
    Mon champ points contient les points qui s'accumulent au cours de l'année pour les personnes. A la fin de l'année, j'aimerais, tout en conservant l'ordre des personnes par points, mettre à jour le champ points avec des valeurs continues: la personne qui a le plus de points=1000, le 2me=999, le 3me=998, le 4me=999. Voilà, j'espère que c'est plus clair...

  4. #4
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Bonjour pipoket et bienvenue sur le forum!
    ce que nous voulons savoir, c'est :
    qu'est ce que tu définis par resserrer des points?

    Essaie d'envoyer:
    1->une liste de personnes avec leurs points
    2->un exemple de résultats à obtenir de cette liste à partir de ta requête.

    Merci
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Exemple
    Origine:
    personnes points
    personne1 1796
    personne2 790
    personne3 1807
    personne4 1000

    Résultat à obtenir:
    personnes points
    personne3 1000
    personne1 999
    personne4 998
    personne2 997

    L'ordre du résultat est déterminé par l'ordre des points d'origine.

  6. #6
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    A voir le résultat en sortie et les éléments à l'origine, le classement ne se fait que suivant le nombre de points.
    Si c'est vraiment le cas, je pense que le est largement suffisant pour la requête.
    A moins que l'opération de mise à jour des points ne suive une certaine logique qui doit être exécutée avec les requêtes
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut update
    Quelque chose comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE personnes SET position = (
        SELECT position
        FROM personnes 
        ORDER BY position;
    )
    Mais ceci ne va pas me permettre d'affecter les valeurs 1000, 999, 998, 997,...

    L'idée serait de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE personnes SET position = (
        SELECT (SELECT COUNT(position) FROM personnes AS tableAlias WHERE position <  personnes.position)+1 AS Classement
        FROM personnes
        ORDER BY position;
    )
    ORDER BY position;
    Le SELECT interne me renvoie bien une liste continue de nombres de 1 à mon nombre de personnes (à modifier pour obtenir 1000 à 1000-nombre de personnes), mais un UPDATE ORDER BY n'existe pas si je ne me trompe pas... Je crois que je vais me tourner vers VBA pour faire une boucle.

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut solution en VBA
    Voici une solution en VBA qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Max = DMax("position", "personnes") 'position la plus haute
    Min = DMin("position", "personnes") 'position la plus basse
    Dim i As Integer 'pour la boucle
    Dim i2 As Integer 'pour incrémentation de la position
     
    i2 = 1000 'première valeur de position à insérer
     
    For i = Max To Min Step -1 'boucle de la position la plus haute à la plus basse
     
        Dim Requete As String
        Dim DB As DAO.Database
        Requete = "UPDATE personnes SET position = (" & i2 & ") WHERE position = " & i & ";"
        Set DB = CurrentDb
        DB.Execute Requete
     
        If DB.RecordsAffected > 0 Then 'si un update a eu lieu: la position s'incrémente de -1
            i2 = i2 - 1
        End If
     
    Next i
    Merci de vous être penchés sur mon problème !

  9. #9
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Citation Envoyé par pipoket Voir le message
    mais un UPDATE ORDER BY n'existe pas si je ne me trompe pas... Je crois que je vais me tourner vers VBA pour faire une boucle.
    effectivement VBA serait nettement mieux.

    Mais je n'arrive toujours pas à voir la logique de mise à jour des données. Le premier doit être à 1000, et on décrémente par pas de 1 jusqu'au dernier. Est ce le cas?
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut c'est ça
    Exactement: voir le post précédent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Invariants différentiels pour caractériser les points d'intérêt
    Par mobi_bil dans le forum Traitement d'images
    Réponses: 69
    Dernier message: 29/07/2009, 20h30
  2. Requête pour Oter les points dans les Num de tel
    Par isabelle b dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/07/2008, 01h27
  3. Encore une histoire pour remplacer les points
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/08/2007, 11h41
  4. insert ou update pour raffraichir les données
    Par laurent.w dans le forum Access
    Réponses: 4
    Dernier message: 23/01/2007, 09h45
  5. Requete pour compter les points dans un championnat
    Par IG2da dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2006, 17h58

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