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 :

doublon et trie sur autre colonne


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut doublon et trie sur autre colonne
    bonjour à tous,

    je vous donne explique mon problème, en espérant qu'une personne saura y répondre ^^

    j'ai dans une table 5 colonnes que je désigne sous le nom de colonne 1, colonne 2 etc et je posède 100 lignes dans cette table.

    dans la colonne 1 se trouve les id de 1 à 100
    dans la colonne 2 se trouve les noms
    dans la colonne 3 se trouve les prénoms
    dans la colonne 4 se trouve le code postal
    dans la colonne 5 se trouve la ville

    je cherche à effectuer une requête sur la colonne 3 (les prénoms) qui doit supprimer les doublons (je ne veux qu'un seul prénom différent)

    de plus, je ne veux que des prénoms unique dont le code postal est égale à 59000 pour exemple

    enfin je veux que le résultat soit affiche avec un trie sur la colonne 1 (id)

    personnellement voici la requête que j'ai testé

    SELECT distinct colonne 3 FROM 'matable' WHERE colonne 4 = '59000'

    là j'obtiens bien qu'un prénom unique ayant en plus le code postal à 59000 mais le trie s'effectue sur la colonne 3 et non sur la colonne 1 comme je le voudrai.

    Si un spécialiste des requêtes passe dans le coin et peut m'aider ^^

    Merci d'avance

    ++

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT distinct colonne 3 FROM 'matable' WHERE colonne 4 = '59000' order by colonne1
    non ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    non ça ne fonctionne pas malheureusement, comme je n'ai pas selectionné colonne1 avant from, il ne connait pas les éléments pour faire le trie sur order by colonne1

    Merci quand meme de ta participation ^^

    Toujours en attente d'aide merci

    ++

  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Ca marche très bien chez moi (mySQL 4.0.17)

    Tu as quelle version ?

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    Je suis chez www.ovh.com mais je ne sais pas quelle version j'ai

    en tout cas, ça ne fonctionne pas, le resultat recherché n'est pas bon

    encore merci pour ton aide

    Si quelqu'un à la solution

    merci d'avance

  6. #6
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    un autre exemple : ce forum c'est phpbb

    si je prend la table phpbb_posts voici les 3 premières colonnes

    post_id, topic_id, forum_id

    si je veux afficher les 3 derniers posts en cours, du forum x (exemple 1), je dois dire :

    SELECT distinct topic_id FROM phpbb_posts WHERE forum_id = '1' order by post_id limit 3

    ainsi j'obtiens les 3 derniers messages du forum 1, où des personnes ont répondu.

    Je ne sais pas si c'est plus clair comme exemple mais pour moi sur ovh ça ne fonctionne pas

    Merci aux pro du sql de m'aider ^^

    ++

    p.s. : est il possible de faire une requete pour dire de trier la base sous post_id et ensuite utiliser cette requete pour faire la suivante (SELECT distinct topic_id FROM phpbb_posts WHERE forum_id = '1') ?

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    J'ai presque résolu mon problème avec la requête suivante :

    SELECT post_id, topic_id FROM phpbb_posts WHERE forum_id = '1' group by topic_id order by post_id desc

    voilà ce que j'obtiens en supposant les éléments suivants :

    post_id n° 130, le topic_id = 93
    post_id n° 135, le topic_id = 93
    post_id n° 140, le topic_id = 93

    en exécutant la requête ci-dessus, il me supprime les doublons à valeur 93 et la ligne qui va me donnner est la suivante

    post_id n° 130, le topic_id = 93

    hors moi je veux qu'il me donne la ligne

    post_id n° 140, le topic_id = 93 (afin de conserver le dernier message à afficher)

    Comment faire ?

    Encore merci pour votre aide ^^

  8. #8
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut
    Si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT post_id, topic_id FROM phpbb_posts WHERE forum_id = '1' group by topic_id order by post_id asc
    Ca ne marche pas ?

  9. #9
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    non cela ne fonctionne pas

    qui a la bonne solution ?

  10. #10
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par Force59
    J'ai presque résolu mon problème avec la requête suivante :

    SELECT post_id, topic_id FROM phpbb_posts WHERE forum_id = '1' group by topic_id order by post_id desc
    Moi je dirais plutôt que tu t'éloignes de la solution... Tout à l'heure tu étais parti pour sélectionner les 3 derniers posts du forum 1, pourquoi rajouter maintenant la notion de topic et faire un regoupement sur le topic_id ?

    Si tu veux avoir le dernier post de chaque topic (ce qui change complètement les données du problème), il faudrait plutôt faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT topic_id, max(post_id) FROM phpbb_posts WHERE forum_id = '1' group by topic_id
    Au passage, il n'est écrit nulle part que les champs de la clause ORDER BY doivent être dans le SELECT, donc je persiste à dire que les premières requêtes devraient marcher

  11. #11
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    Cela ne fonctionne pas.

    voici le resultat de ma base de donnée avant traitement de l'information classé par post_id (vu que le dernier post_id correspond à un nouveau message ou à une réponse)

    post_id 303 topic_id 105 forum_id 1
    post_id 304 topic_id 106 forum_id 2
    post_id 305 topic_id 103 forum_id 3
    post_id 306 topic_id 107 forum_id 1
    post_id 307 topic_id 107 forum_id 1
    post_id 308 topic_id 104 forum_id 2
    post_id 309 topic_id 107 forum_id 1
    post_id 310 topic_id 107 forum_id 1
    post_id 311 topic_id 93 forum_id 1
    post_id 312 topic_id 108 forum_id 4
    post_id 313 topic_id 106 forum_id 2
    post_id 314 topic_id 107 forum_id 1
    post_id 315 topic_id 93 forum_id 1
    post_id 316 topic_id 107 forum_id 1
    post_id 317 topic_id 101 forum_id 1
    post_id 318 topic_id 93 forum_id 1
    post_id 319 topic_id 101 forum_id 1
    post_id 320 topic_id 107 forum_id 1
    post_id 321 topic_id 101 forum_id 1

    en rouge c'est le résultat que je souhaite avoir après traitement de l'information (soit les 4 derniers messages posté sur le forum, nouveaux messages et réponses comprises). Soit

    post_id 303 topic_id 105 forum_id 1
    post_id 318 topic_id 93 forum_id 1
    post_id 320 topic_id 107 forum_id 1
    post_id 321 topic_id 101 forum_id 1

    donc si j'execute la requête suivante :

    SELECT topic_id, max(post_id) FROM phpbb_posts WHERE forum_id = '1' group by topic_id

    j'obiens ceci pour les 4 derniers enregistrements

    topic_id 100 max(post_id) 276
    topic_id 101 max(post_id) 321
    topic_id 105 max(post_id) 303
    topic_id 107 max(post_id) 320

    on voit bien que le dernier enregistrement ici n'est pas le

    post_id 321 topic_id 101, que l'avant dernier n'est pas le
    post_id 320 topic_id 107 etc

    donc ce que je veux, c'est ce qu'il y a en rouge comme résultat

    Merci encore à tous pour votre aide

    Toujours en attente de la solution

    ++

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

Discussions similaires

  1. Linq To Sql, trie sur une colonne text
    Par Oberown dans le forum Linq
    Réponses: 4
    Dernier message: 10/12/2011, 14h51
  2. [MySQL] Problème de trie sur une colonne date
    Par vince851 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/04/2010, 11h02
  3. compte valeur avec critère sur autre colonne
    Par NATOU2 dans le forum Excel
    Réponses: 3
    Dernier message: 28/01/2008, 11h02
  4. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 17h01

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