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 :

[SQL] Liste sans doublons


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [SQL] Liste sans doublons
    Bonjour,
    Voila, j'ai une table films avec entre autres:
    un champ acteur qui peut contenir parfois 1,2 ou 3 noms d'acteur,par id, séparés par une virgule, Certains noms d'acteurs se retrouvent sur différentes id (film)
    je voudrais faire une requete qui me renvoie une liste de tous les acteurs, classée par ordre alphabetique , sans doublons et sans erreur si le film ne mentionne qu'un acteur..
    Pour le problème de la virgule, je l'ai résolu en php avec explode, pour les doublons, je ne vois pas comment faire, si quelqu'un peut m'aider, je suis débutante en php, je sais qu'il existe une fonction array_unique, mais, je ne vois pas comment m'en servir.Peut etre y a t-il un moyen dans la requete sql?
    Merci
    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
    <?php
     
                            require("include/connexion.inc.php");                                   
                            $reponse = mysql_query("SELECT DISTINCT acteur_film FROM films ORDER BY acteur_film");                          
                            while ($donnees = mysql_fetch_array($reponse) )
                            {                                                                       
                            $acteur = $donnees['acteur_film'];
                            $acteur_explosee = explode(",", $acteur);
     
                            echo ''.$acteur_explosee[0].'<br/>';
                            echo ''.$acteur_explosee[1].'<br/>';
                            echo ''.$acteur_explosee[2].'<br/>';
                            }
     
    ?>

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Le mieux ca serait d'avoir une table avec une liste des acteurs quand meme.
    Mais tu peux faire quelquechose comme ca

    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
    require("include/connexion.inc.php");    
    // récupère la liste des tous les acteurs de tous les films                               
    $reponse = mysql_query("SELECT acteur_film FROM films");     
     
    // Crée un tableau qui va contenir tous les acteurs
    $acteurs = array();
     
    while ($donnees = mysql_fetch_array($reponse) )
    {                                                                       
    $acteur = $donnees['acteur_film'];
    $acteur_explosee = explode(",", $acteur);
     
    // pour chaque acteur de ce film
    foreach($acteur_explosee as $nom_acteur)
    {
    // ajoute dans la liste
    $acteurs[] = $nom_acteur;
    }
    }
     
    // Enlève les doublons
    $acteursUniques = array_unique($acteurs);
     
    // Trie le tableau
    $acteursTries = sort($acteursUniques);

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Liste sans doublons
    Merci pour m'avoir répondu si vite.
    Je pense comprendre le principe, mais j'ai du faire une erreur car j'obtiens:
    Fatal error: [] operator not supported for strings on line 18.
    J'ai rajouté un s à $auteur

    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
    <?php
    require("include/connexion.inc.php");    
    // récupère la liste des tous les acteurs de tous les films                               
    $reponse = mysql_query("SELECT acteur_film FROM films");     
     
    // Crée un tableau qui va contenir tous les acteurs
    $acteurs = array();
     
    while ($donnees = mysql_fetch_array($reponse) )
    {                                                                       
    $acteurs = $donnees['acteur_film'];
    $acteur_explosee = explode(",", $acteurs);
     
    // pour chaque acteur de ce film
    foreach($acteur_explosee as $nom_acteur)
    {
    // ajoute dans la liste
    $acteurs[] = $nom_acteur;
    // Enlève les doublons
    $acteursUniques = array_unique($acteurs);
    		echo ''.$acteursUniques.'<br/>';
     
    }
    }
    ?>

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    tu définis $acteurs comme étant un array() mais juste apres tu lui mets une string dedans donc forcément ca rale...
    Remplaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $acteurs = $donnees['acteur_film'];
    $acteur_explosee = explode(",", $acteurs);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $acteur_explosee = explode(",", $donnees['acteur_film']);

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Effectivement,ça pouvait pas marcher.
    J'ai repris le code que tu m'as donné en premier, mais j'obtiens une liste de array.
    Je vois pas ou ça cloche?

    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
    <?php
    require("include/connexion.inc.php");    
    // récupère la liste des tous les acteurs de tous les films                               
    $reponse = mysql_query("SELECT acteur_film FROM films");     
     
    // Crée un tableau qui va contenir tous les acteurs
    $acteurs = array();
     
    while ($donnees = mysql_fetch_array($reponse) )
    {                                                                       
    $acteur = $donnees['acteur_film'];
    $acteur_explosee = explode(",", $acteur);
     
    // pour chaque acteur de ce film
    foreach($acteur_explosee as $nom_acteur)
    {
    // ajoute dans la liste
    $acteurs[] = $nom_acteur;
    // Enlève les doublons
    $acteursUniques = array_unique($acteurs);
    echo ''.$acteursUniques.'<br/>';
    }
     
    }
    ?>

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Si tu regardes bien mon code d'origine, mon array_unique et le echo sont en dehors du foreach, il faut d'abord récupérer TOUS les acteurs, et ensuite tu tries et tu affiches
    Pourquoi tu ne prends pas directement mon code?

  7. #7
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Liste sans doublons
    J'ai bien sûr essayé ton code, en rajoutant l'affichage en dehors de foreach,
    mais cela m'affiche une liste d'array.
    Voila ton code avec ma ligne d'affichage:

    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
    <?php
    require("include/connexion.inc.php");    
    // récupère la liste des tous les acteurs de tous les films                               
    $reponse = mysql_query("SELECT acteur_film FROM films");     
     
    // Crée un tableau qui va contenir tous les acteurs
    $acteurs = array();
     
    while ($donnees = mysql_fetch_array($reponse) )
    {                                                                       
    $acteur = $donnees['acteur_film'];
    $acteur_explosee = explode(",", $acteur);
     
    // pour chaque acteur de ce film
    foreach($acteur_explosee as $nom_acteur)
    {
    // ajoute dans la liste
    $acteurs[] = $nom_acteur;
    }
    }
     
    // Enlève les doublons
    $acteursUniques = array_unique($acteurs);
     
    // Trie le tableau
    $acteursTries = sort($acteursUniques);
     echo ''.$acteursUniques.'<br/>';
     
     ?>

  8. #8
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    echo ne permet pas d'afficher un tableau directement.
    Il faut faire ca a la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     foreach($acteursUniques as $monacteur)
    {
    echo $monacteur . '<br/>';
    }

  9. #9
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Liste sans doublons
    Merci koopajah pour ta patience.
    C'est super,ça marche nickel.
    Je vais potasser foreach

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

Discussions similaires

  1. Liste sans doublon
    Par marc56 dans le forum Excel
    Réponses: 8
    Dernier message: 08/01/2008, 01h37
  2. Automatisation liste sans doublon
    Par mathel dans le forum Excel
    Réponses: 2
    Dernier message: 03/01/2008, 14h28
  3. Liste sans doublon
    Par marc56 dans le forum Excel
    Réponses: 5
    Dernier message: 19/12/2007, 20h22
  4. liste sans doublons
    Par doons dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/10/2007, 14h47
  5. [VBA-E] Liste sans doublons pour remplir cellule
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2007, 12h45

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