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

PHP & Base de données Discussion :

Trouver le minimum par colonne [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut Trouver le minimum par colonne
    a partir d'une base mysql j'ai le tableau suivant :

    nom A 2 4 3 4 4 4 4 3 4
    nom B 4 3 4 4 4 4 4 3 4
    nom C 5 4 4 4 4 4 3 4 4
    nom D 4 2 4 4 4 4 4 3 4
    nom E 4 4 3 4 5 4 4 4 4
    nom F 4 4 3 4 4 4 3 4 4
    nom G 3 4 4 4 4 4 4 3 4
    nom H 5 4 4 4 4 4 3 4 4
    nom I 4 4 2 4 4 4 3 4 4
    nom J 4 4 3 4 4 4 4 3 4
    nom K 4 4 3 4 4 4 4 3 4
    nom L 4 3 4 4 4 4 3 4 4

    je veut obtenir le nom et le min pour chaque colonne pour produire un tableau du genre
    nom A 2
    nom D 2
    nom I 2
    ............

    j'obtiens la premiere colonne avec :
    SELECT DISTINCT (joueurs), min( t1 )
    FROM resultat

    mais je ne trouve pas comment obtenir la suite

    Merci

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    je ne suis pas sûr d'avoir bien compris ce que tu veux, mais une requête comme ça ne répond pas à ton problème ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT (joueurs), min( t1 ), min(t2)
    FROM resultat
    Si tu veux que l'on t'aide plus, il nous faudrait la structure de tes tables, et décrire plus précisément ce que tu veux obtenir...

  3. #3
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Il veut une requête qui lui retourne, pour chaque ligne, la plus petite valeur contenue par les 9 colonnes numériques.
    SQL n'est pas trop adapté pour ce genre de recherche.
    Je vais y réfléchir, mais pour l'instant, sauf à passer par une fonction utilisateur, je n'ai pas vraiment d'idées.
    Il s'agit d'avoir une logique de lignes pour des infos en colonnes. Je crois avoir lu quelque chose à ce sujet chez Joe Celko et/ou Frédéric Brouard (alias SQLPro).
    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)

  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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut Des données de ligne traitées comme une colonne
    C'est bien dans "SQL Développement" de F. Brouard chez Campupress (ISBN 2-7440-1184-3 Copyright 2001) pp 471-473.
    Mais je retiens surtout son conseil final:
    Eh bien oui, cela fait onze requêtes ou sous-requêtes (on serait sûrement au double avec tes 9 colonnes) et les performances d'une telle construction peuvent s'en ressentir considérablement. Nous sommes aux limites des performances qu'offre SQL et dans de tels cas, le recours à un traitement classique dans un langage hôte se révèle indispensable.
    Notons au passage qu'il est parfaiement possible de traiter un tels cas sous la forme d'une procédure stockée plutôt que d'une pure et unique requête SQL. La performance en sera grandement améliorée.
    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 averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut Voici la structure de ma table
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    ---------
    -- Structure de la table `resultat`
    --
     
    CREATE TABLE IF NOT EXISTS `resultat` (
    `id` text NOT NULL,
    `joueurs` text NOT NULL,
    `t1` int(11) NOT NULL,
    `t2` int(11) NOT NULL,
    `t3` int(11) NOT NULL,
    `t4` int(11) NOT NULL,
    `t5` int(11) NOT NULL,
    `t6` int(11) NOT NULL,
    `t7` int(11) NOT NULL,
    `t8` int(11) NOT NULL,
    `t9` int(11) NOT NULL,
    `total` int(11) NOT NULL,
    `t10` int(11) NOT NULL,
    `t11` int(11) NOT NULL,
    `t12` int(11) NOT NULL,
    `t13` int(11) NOT NULL,
    `t14` int(11) NOT NULL,
    `t15` int(11) NOT NULL,
    `t16` int(11) NOT NULL,
    `t17` int(11) NOT NULL,
    `t18` int(11) NOT NULL,
    `total2` int(11) NOT NULL,
    `total3` int(11) NOT NULL,
    `skins` int(11) NOT NULL,
    `nombre skins` int(11) NOT NULL,
    `oiselets` int(11) NOT NULL,
    KEY `total3` (`total3`),
    KEY `t1` (`t1`,`t2`,`t3`,`t4`,`t5`,`t6`,`t7`,`t8`,`t9`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `resultat`
    --
     
    INSERT INTO `resultat` (`id`, `joueurs`, `t1`, `t2`, `t3`, `t4`, `t5`, `t6`, `t7`, `t8`, `t9`, `total`, `t10`, `t11`, `t12`, `t13`, `t14`, `t15`, `t16`, `t17`, `t18`, `total2`, `total3`, `skins`, `nombre skins`, `oiselets`) VALUES
    ('1', 'Jean-Claude Robitaille', 2, 4, 3, 4, 4, 4, 4, 3, 4, 33, 4, 4, 3, 4, 3, 4, 3, 4, 3, 32, 65, -5, 0, 0),
    ('2', 'Alain Vallières', 4, 4, 4, 4, 4, 4, 3, 4, 4, 35, 4, 3, 4, 4, 4, 4, 4, 4, 4, 35, 70, 0, 0, 0),
    ('3', 'Jacques Lachance', 4, 4, 4, 4, 4, 4, 4, 3, 4, 35, 5, 4, 4, 4, 4, 4, 3, 4, 4, 36, 71, 1, 0, 0),
    ('4', 'Alain Létourneau', 4, 4, 4, 5, 3, 4, 3, 4, 4, 37, 4, 4, 3, 4, 4, 4, 3, 4, 3, 33, 70, 0, 0, 0),
    ('5', 'Pierre Lamarre', 4, 4, 4, 4, 4, 4, 4, 3, 4, 35, 4, 3, 4, 4, 4, 4, 4, 4, 4, 35, 70, 0, 0, 0),
    ('6', 'André Boivin', 5, 4, 4, 4, 4, 4, 3, 4, 4, 36, 4, 4, 3, 4, 3, 4, 3, 4, 3, 32, 68, -2, 0, 0),
    ('7', 'Marcel Laberge', 4, 4, 2, 4, 5, 4, 4, 4, 4, 36, 4, 3, 4, 4, 4, 4, 4, 4, 4, 35, 71, 1, 0, 0),
    ('8', 'Jacques Boisvert', 4, 2, 4, 4, 4, 4, 4, 3, 4, 34, 4, 4, 3, 4, 4, 4, 3, 4, 3, 33, 67, -3, 0, 0),
    ('9', 'Jacques Tremblay', 4, 4, 3, 4, 4, 4, 3, 4, 4, 34, 4, 3, 4, 4, 3, 4, 4, 4, 4, 34, 68, -2, 0, 0),
    ('10', 'Gilles Hamel', 4, 3, 4, 4, 4, 4, 4, 3, 4, 34, 3, 4, 3, 3, 4, 3, 4, 4, 4, 32, 66, -4, 0, 0),
    ('', 'Harold Fillion', 4, 4, 4, 3, 4, 4, 3, 4, 4, 34, 4, 4, 4, 4, 4, 4, 4, 3, 4, 35, 69, -1, 0, 0),
    ('', 'André Néron', 4, 4, 3, 4, 4, 4, 2, 4, 4, 35, 5, 4, 4, 4, 4, 4, 3, 4, 4, 36, 71, 1, 0, 0),
    ('', 'Jean Garneau', 4, 4, 3, 4, 5, 4, 4, 4, 4, 36, 3, 4, 3, 4, 4, 3, 3, 4, 3, 31, 67, -3, 0, 0),
    ('', 'Benoit Boudreault', 4, 3, 4, 4, 4, 2, 4, 3, 4, 34, 4, 4, 4, 4, 3, 4, 4, 4, 4, 35, 69, -1, 0, 0),
    ('', 'Jean-Marc Linteau', 4, 4, 3, 4, 4, 4, 3, 4, 4, 34, 5, 4, 4, 4, 4, 4, 4, 4, 3, 36, 70, 0, 0, 0),
    ('', 'David Boissonneault', 4, 3, 4, 4, 5, 4, 4, 4, 4, 36, 4, 3, 4, 4, 4, 4, 3, 3, 4, 33, 69, -1, 0, 0),
    ('', 'Denis Turgeon', 4, 4, 3, 4, 4, 4, 4, 3, 4, 34, 3, 4, 4, 4, 4, 4, 4, 4, 3, 34, 68, -2, 0, 0),
    ('', 'Jean Godbout', 4, 3, 4, 4, 4, 4, 3, 4, 4, 34, 5, 4, 4, 4, 4, 4, 4, 3, 4, 36, 70, 0, 0, 0),
    ('', 'Marc Bernier', 4, 4, 3, 4, 4, 4, 4, 3, 4, 34, 4, 3, 4, 4, 4, 4, 4, 4, 3, 34, 68, -2, 0, 0),
    ('', 'Pierre Blais', 4, 3, 4, 4, 4, 4, 3, 4, 4, 34, 3, 4, 4, 4, 4, 4, 4, 3, 4, 34, 68, -2, 0, 0),
    ('', 'Yves Blackburn', 5, 4, 4, 4, 4, 4, 4, 3, 4, 36, 4, 3, 4, 4, 4, 4, 4, 4, 3, 34, 70, 0, 0, 0),
    ('', 'Raynald Bhérer', 4, 4, 3, 4, 4, 4, 3, 4, 4, 34, 3, 4, 3, 4, 4, 4, 4, 3, 4, 33, 67, -3, 0, 0),
    ('', 'Alain Cyr', 4, 3, 4, 4, 4, 4, 4, 3, 4, 34, 4, 4, 4, 5, 5, 4, 4, 4, 4, 38, 72, 2, 0, 0),
    ('', 'Jean Bédard', 4, 4, 3, 4, 4, 4, 3, 4, 4, 34, 4, 4, 4, 4, 4, 4, 4, 3, 4, 35, 69, -1, 0, 0),
    ('', 'Bernard Dionne', 4, 3, 4, 4, 4, 4, 4, 3, 4, 34, 5, 4, 4, 4, 4, 4, 3, 4, 4, 36, 70, 0, 0, 0),
    ('', 'Omer Dufour', 4, 4, 3, 4, 4, 4, 3, 2, 4, 34, 5, 4, 4, 4, 4, 4, 3, 4, 3, 35, 69, -1, 0, 0),
    ('', 'Sylvain Cloutie', 4, 3, 4, 4, 4, 4, 4, 4, 3, 34, 4, 3, 4, 4, 4, 4, 4, 4, 4, 35, 69, -1, 0, 0),
    ('', 'Richard Soucy', 4, 4, 3, 4, 4, 4, 4, 3, 4, 34, 3, 4, 4, 4, 4, 4, 4, 4, 3, 34, 68, -2, 0, 0),
    ('', 'Yvon Soucy', 4, 3, 4, 4, 4, 4, 4, 4, 3, 34, 4, 4, 4, 4, 4, 4, 4, 3, 4, 35, 69, -1, 0, 0),
    ('', 'Réal Dufour', 4, 4, 3, 4, 4, 4, 4, 3, 2, 34, 4, 4, 3, 4, 4, 4, 4, 4, 3, 34, 68, -2, 0, 0),
    ('', 'Yves Syvain', 4, 3, 4, 4, 5, 4, 4, 4, 4, 36, 4, 3, 4, 4, 4, 4, 4, 3, 4, 34, 70, 0, 0, 0),
    ('', 'Julien Tremblay', 5, 4, 4, 4, 4, 4, 4, 4, 3, 36, 3, 4, 3, 5, 4, 4, 4, 4, 4, 35, 71, 1, 0, 0),
    ('', 'John Dunn', 4, 3, 4, 4, 4, 4, 4, 3, 4, 34, 4, 4, 4, 4, 3, 4, 4, 4, 4, 35, 69, -1, 0, 0),
    ('', 'Mario Fortin', 3, 4, 4, 4, 4, 4, 4, 4, 3, 34, 4, 4, 4, 3, 4, 4, 4, 4, 4, 35, 69, -1, 0, 0),
    ('', 'Gilles Plante', 5, 4, 4, 4, 4, 4, 3, 3, 4, 35, 5, 4, 4, 2, 4, 4, 3, 4, 4, 36, 71, 1, 0, 0),
    ('', 'Guy Joncas', 4, 3, 4, 4, 4, 4, 4, 4, 4, 35, 4, 3, 4, 4, 4, 4, 3, 4, 3, 33, 68, -2, 0, 0),
    ('', 'André Dyotte', 3, 4, 4, 4, 4, 4, 4, 3, 4, 34, 3, 4, 3, 4, 4, 4, 4, 4, 3, 33, 67, -3, 0, 0),
    ('', 'Martin Pouliot', 5, 4, 4, 4, 4, 4, 3, 4, 4, 36, 4, 4, 4, 3, 4, 3, 4, 3, 4, 30, 66, -4, 0, 0);
    ---------

    Voici ce que je veut obtenir


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    $query10="SELECT ID,joueurs, t10,count( t10 ) AS nbr FROM resultat WHERE t10 = ( SELECT MIN( t10 ) FROM resultat ) ";
    $result=mysql_query($query10);
    $champs=mysql_num_fields($result);
    $lignes=mysql_num_rows($result);
    if ($lignes!=0) {
    while ($rows = mysql_fetch_array($result))
    { 
    echo ("<table border='3' cellpadding='4' cellspacing='4' bordercolor='#000033'>
    <tr>
    <td width='90'class='small'>TROU NO.</td>
    <td width='225' class='small'>NOM</td>
    <td class='small'>MIN</td>
    <td class='small'>NOMBRE</td>
    </tr>
    <tr>
    <td width='90' align='center' class='small'>10</td>
    <td width='225' class='small'>$rows[1]</td>
    <td class='small' align='center'>$rows[2]</td>
    <td class='small' align='center'>$rows[3]</td>
    </tr>
    ");
    }
    echo "</tr></table>";
    echo "
    ";}
    $query11="SELECT ID,joueurs, t11,count( t11 ) AS nbr FROM resultat WHERE t11 = ( SELECT MIN( t11 ) FROM resultat )";
    $result=mysql_query($query11);
    $champs=mysql_num_fields($result);
    $lignes=mysql_num_rows($result);
    if ($lignes!=0) {
    while ($rows = mysql_fetch_array($result))
    {
    echo ("<table border='3' cellpadding='4' cellspacing='4' bordercolor='#000033'>
    <tr>
    <td width='90'class='small'>TROU NO.</td>
    <td width='225' class='small'>NOM</td>
    <td class='small'>MIN</td>
    <td class='small'>NOMBRE</td>
    </tr>
    <tr>
    <td width='90' align='center' class='small'>11</td>
    <td width='225' class='small'>$rows[1]</td>
    <td class='small' align='center'>$rows[2]</td>
    <td class='small' align='center'>$rows[3]</td>
    </tr>
    ");
    }
    echo "</tr></table>";
    echo "
    ";}

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

Discussions similaires

  1. Tri par colonne de n'importe quel StringGrid
    Par Dionyzos dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/07/2008, 16h47
  2. où trouver ordre utilisé par order by
    Par mussara dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 02/09/2005, 17h35
  3. [HTML] Construire un tableau colonne par colonne ?
    Par Cthulhu 22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/05/2005, 15h31
  4. [VB.NET] Écriture par colonne streamwriter...?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/04/2005, 15h32
  5. trouver le minimum d'une liste
    Par speed034 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/12/2004, 12h29

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