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 :

extraire une ligne parmi des lignes qui ont des colonnes identiques


Sujet :

Requêtes MySQL

  1. #1
    g_h
    g_h est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut extraire une ligne parmi des lignes qui ont des colonnes identiques
    bonjour,
    je cherche a extraire une ligne parmi des lignes qui ont 3 colonnes en commun.
    Si je reprends l'exemple donne ici, j'obtiens:

    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
     
    +----------+------------+--------------+----------------------------------+
    | colonne1 | colonne2   | colonne3 | colonne4                        |
    +----------+------------+--------------+----------------------------------+
    | 1357778  | 2481256754 | toto.xdr  | 9e888951e502d1a0bf9e5901ac21f61e |
    | 1357778  | 2481256754 | toto.xdr  | ed36eba6817a9784a4f8703790abd9c6 |
    | 2476060  | 2498608639 | toto.xdr  | e812759d99ccca19db7c74ec7e9c36c3 |
    | 2476060  | 2498608639 | toto.xdr  | a37ce676494839975aa618b936daafc6 |
    | 2476060  | 2498608639 | toto.xdr  | 6ac2435e32b823294d2b687777a2675b |
    | 2476060  | 2498608639 | toto.xdr  | 9371000873a5122d51d9e69018d239fa |
    | 393072   | 2477904015 | toto.xdr  | 492f9a51f8196494376820c8bdca0646 |
    | 393072   | 2477904015 | toto.xdr  | edd64f7ee12a65ec059be51d02d0317f |
    | 393072   | 2477904015 | toto.xdr  | 0c08e6fad4d9ed1ca299657e60e37b55 |
    | 393072   | 2477904015 | toto.xdr  | 5324b7d135eb6fe58ddd69114a032419 |
    | 393072   | 2477904015 | toto.xdr  | a87d8bdc365311634cff7e60286b4a09 |
    | 393072   | 2477904015 | toto.xdr  | 96a7987cd6423a689e80e783c82e5e5f |
    | 39580    | 253995610  | toto.xdr  | e9e5d8305d23db66d04cd09cd0788c72 |
    | 39580    | 1542159308 | toto.xdr  | de856db60f264644b3e034a2e7a6b98d |
    | 39580    | 253995610  | toto.xdr  | dc4d42c0ef1b6c1a2505a29ad4f5a99e |
    +----------+------------+--------------+----------------------------------+

    lorsque colonne1 et colone2 sont identiques, je voudrais ne garder qu'une seule ligne, et voir toutes les colonnes

    si quelqu'un peut m'aider,

    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,
    Je ne comprends pas trop ton besoin. Ressemblerait-il à celui de ce post http://www.developpez.net/forums/d98...able-colonnes/ ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    g_h
    g_h est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    par rapport au resultat que j'ai presente, je devrais, par exmple, n'avoir que la premiere ligne et pas la deuxieme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    | 1357778  | 2481256754 | toto.xdr  | 9e888951e502d1a0bf9e5901ac21f61e |
    | 1357778  | 2481256754 | toto.xdr  | ed36eba6817a9784a4f8703790abd9c6 |
    puiqu'elles ont le meme (col1, col2, col3)

    seul a change col4. Si je n'avais pas besoin de col4, j'aurais pu me contenter d'un DISTINCT.
    Merci pour le lien, mais ce n'est pas tout a fait ce que je veux faire (enfin s j'ai bien compris)

  4. #4
    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
    Le problème c'est que pour sélectionner une ligne plutôt que d'autres il va falloir un critère. Or je ne vois pas sur quel critère tu veux fonder cette discrimination.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre éclairé

    Homme Profil pro
    Pilote d'essais retraité
    Inscrit en
    Septembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Pilote d'essais retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 47
    Points : 799
    Points
    799
    Par défaut
    Il y a une méthode "bourrin" qui consiste à passer par une procédure qui crée une table temporaire qui contiendra le résultat du tri. A adapter bien sûr en fonction de la table qui contient les données.
    La ligne CREATE DEFINER doit être adaptée en fonction de votre identifiant de connection ici le user s'appelle USER et peut se connecter de n'importe où.
    Code sql : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    DELIMITER $$
     
    CREATE DEFINER=`USER`@`%` PROCEDURE `sel_ligne`()
    BEGIN
        DECLARE done INT DEFAULT 0;
        DECLARE _col1, _col2 INT;
        DECLARE _col3, _col4 VARCHAR(35);
        DECLARE _oldcol1, _oldcol2 INT;
        DECLARE _oldcol3, _oldcol4 VARCHAR(35);
        DECLARE cur1 CURSOR FOR select col1, col2, col3, col4 FROM new_table ORDER BY col1, col2, col3;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
     
        DROP TABLE IF EXISTS `temp_table`;
        CREATE TEMPORARY TABLE `temp_table`(col1 INT, col2 INT, col3 VARCHAR(35), col4 VARCHAR(35));
     
        OPEN cur1;
        FETCH cur1 INTO _oldcol1, _oldcol2, _oldcol3, _oldcol4;
        CLOSE cur1;
        INSERT INTO `temp_table` VALUES (_oldcol1, _oldcol2, _oldcol3, _oldcol4);
        OPEN cur1;
        read_loop: LOOP
            FETCH cur1 INTO _col1, _col2, _col3, _col4;
            IF done THEN
                LEAVE read_loop;
            END IF;
            IF _col1 <> _oldcol1 or _col2 <> _oldcol2 or _col3 <> _oldcol3 THEN
                INSERT INTO `temp_table` VALUES (_col1, _col2, _col3, _col4);
                SET _oldcol1 = _col1;
                SET _oldcol2 = _col2;
                SET _oldcol3 = _col3;
            END IF;
        END LOOP;
        CLOSE cur1;
    END$$
    Peut-être pas joli, mais j'ai testé ça fonctionne.
    Pour trier : CALL sel_ligne;
    Les données sont accessibles par :SELECT * FROM temp_table;

  6. #6
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

    MAX ou MIN ça devrait répondre au besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT colonne1, colonne2, colonne3, MIN(colonne4) 
    FROM a_table
    GROUP BY colonne1, colonne2, colonne3

  7. #7
    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
    Citation Envoyé par Nudger Voir le message
    Bonsoir,

    MAX ou MIN ça devrait répondre au besoin.
    Tu es devin ?
    Qu'est-ce qui, dans l'exposé du besoin, permet d'affirmer que le critère pour ne retenir que "la première ligne" serait un classement ascendant ou descendant sur la valeur de colonne4 ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    Tu es devin ?
    Qu'est-ce qui, dans l'exposé du besoin, permet d'affirmer que le critère pour ne retenir que "la première ligne" serait un classement ascendant ou descendant sur la valeur de colonne4 ?
    Comme il ne précise rien, je suppose qu'il en veut une au hasard, on peut donc ressortir le bon vieux GROUP BY foireux de mysql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table GROUP BY colonne1, colonne2, colonne3

  9. #9
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Citation Envoyé par Maljuna Kris Voir le message
    Tu es devin ?
    Qu'est-ce qui, dans l'exposé du besoin, permet d'affirmer que le critère pour ne retenir que "la première ligne" serait un classement ascendant ou descendant sur la valeur de colonne4 ?
    L'auteur du post nous dit qu'il veut ne garder qu'une seule ligne et n'exprime aucune exigence sur la ligne en question.
    J'ai donné une solution qui répond à la question il me semble.

  10. #10
    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
    C'est pourquoi je lui ai demandé, en vain il est vrai, de préciser un critère de discrimination.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

Discussions similaires

  1. [2008] Requête qui duplique des lignes en fonction d'une valeur dans un champ
    Par Fredo67 dans le forum Développement
    Réponses: 6
    Dernier message: 27/01/2015, 12h03
  2. [WD14] Thread qui ajoute des lignes à une table
    Par rndhnqz dans le forum WinDev
    Réponses: 11
    Dernier message: 09/02/2010, 12h48
  3. Sélection de lignes qui ont des valeurs maximales
    Par sicnarf dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/10/2008, 15h42
  4. Richtextbox qui ajoute des lignes vides
    Par Seto dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/09/2006, 14h10
  5. requette qui renvoi des ligne double
    Par fehmitn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/09/2004, 22h36

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