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

MySQL Discussion :

Array Unique ?


Sujet :

MySQL

  1. #1
    Invité
    Invité(e)
    Par défaut Array Unique ?
    Bonjour, j'aimerais utiliser la fonction array_unique avec mon code pour ne pas afficher 2 fois la même valeur, seulement je ne sais pas où placer la fonction pour qu'elle soit opérationelle, si vous pouviez m'aider svp !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $classe = mysql_query("SELECT id_page, moy FROM analyses ORDER BY id_page");
    	$compteur = 1; 
    	while ($classified = mysql_fetch_array ($classe, MYSQL_ASSOC))
    		{
    			echo ''.$compteur.'.';
    			echo  nl2br(($classified["id_page"].$classified["moy"])."\n"."\n") ;
    			$compteur ++;
    		}
     
    		mysql_free_result($classe);
    et voici la fonction array_unique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $unique = array_keys(array_flip($array));

  2. #2
    Invité
    Invité(e)
    Par défaut
    J'ai oublié de préciser, c'est seulement lorsque le champ id_page est plusieurs fois identique que je veux éviter d'afficher la ligne plus d'une fois, les autres champs ayant des doublons ne doivent pas être éliminer, à moins bien sûr qu'ils fassent parti d'une ligne où id_page s'y trouve en doublon. J'espère ne pas être trop difficile à comprendre, bref..

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Comment définissez vous l'unicité d'une colonne contenant un type de données non atomique ?
    par exemple si
    • la ligne 1 la colonne COL_ARRAY comporte les éléments suivants : [1][3][2]

    et que
    • la ligne 2 la colonne COL_ARRAY comporte les éléments suivants : [3][1][2]

    Y a t-il violation d'unicité ou non selon vous ???

    À partir du moment ou vous violez sciemment la première forme normale ne vous attendez pas à un comportement "normal" de ce que vous pensez être l'unicité !

    Il faut toujours éviter d'utiliser ce genre de type de données (non atomique par nature) sinon vous allez au devant de problèmes complexes et de performances épouvantables !

    Dans votre cas, le plus simple est d'utiliser une table en lieu et place de votre tableau, et vous pourrez régler le problème de l'unicité par la biais de la primary key.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut à tous.

    Je suis du même avis que SQLPRO. Votre table n'est pas conforme à la contrainte d'unicité sur la clef, d'où vos problèmes.

    Si vous avez des doublons sur le couple (id_page ; moy), inutile d'utiliser une astuce en php. Vous devez procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id_page, moy
    FROM analyses
    GROUP BY id_page, moy
    ORDER BY id_page, moy;
    Mais cette façon d'écrire une requête n'est pas propre !
    @+

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut, juste pour être sûr qu'on se comprend bien, si ce que vous appelez 'colonne' est bien ce que moi j'ai appelé 'champ' par erreur je crois, alors dans votre exemple, tout dépend, si la valeur '2' est mon id_page, alors je voudrais afficher une seule des 2 lignes. Mais si je lis ce que vous me dites, la fonction array unique est donc à déconseiller? par crainte de comportement anormal ? J'attend votre clarification sur tout ça, vos réponses sont très appréciées ! Et j'aimerais tout de même tester la fameuse fonction array unique mais je ne sais pas où la placer exactement et comment la renseigner...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci Artemus, le tout fonctionne en ajoutant un GROUP BY, mais pourquoi dis-tu que ce n'est 'pas propre' ? Ça pourrait causer des problèmes de performance?

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut mainpleine.

    La requête que je t'ai donné est une réponse à ta question.
    Ce n'est pas propre de procéder ainsi car comme le dit SQLPRO, ta table n'est pas correctement normalisée.

    Autrement dit, la clef que tu utilises doit être unique dans l'identification de la ligne de ta table.
    Et en respectant cette norme alors tu n'as plus de problème.

    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
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (
      `id_page`  integer unsigned  NOT NULL AUTO_INCREMENT primary key,
      `moyenne`  decimal(5,2)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`moyenne`) values (33.33),(16.25),(12.75),(47.67)
    --------------
     
    --------------
    select * from test
    --------------
     
    +---------+---------+
    | id_page | moyenne |
    +---------+---------+
    |       1 |   33.33 |
    |       2 |   16.25 |
    |       3 |   12.75 |
    |       4 |   47.67 |
    +---------+---------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+

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

Discussions similaires

  1. Remplir un array de valeurs uniques depuis SQL
    Par polpaulin dans le forum Langage
    Réponses: 11
    Dernier message: 20/10/2012, 15h26
  2. Réponses: 15
    Dernier message: 02/12/2011, 22h35
  3. Récupérer uniquement les valeurs non null d'un array
    Par yamatoshi dans le forum Langage
    Réponses: 5
    Dernier message: 07/06/2010, 08h08
  4. array unique sur tableau 2 dimensions
    Par piero53 dans le forum Langage
    Réponses: 14
    Dernier message: 05/03/2010, 11h26
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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