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

Langage PHP Discussion :

lister après requète select distinct


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut lister après requète select distinct
    Salut,

    j'ai une table dans laquelle un champ "tailles" séparé par des tiret à des données de ce type :
    46 -47 -48 - 49
    45 - 46
    43 - 44 - 45
    ...

    ce que je souhaite afficher c'est les tailles disponibles sans répéter les tailles en double
    voici ce que j'ai fait, j'arrive à lister toutes les tailles, mais pas à filrer puis ordonner la liste :

    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
    $sql="SELECT DISTINCT taille from catalogue";
     
     
    //Liste des tailles pour le menu (toutes)
    $reponse  =  mysql("$DBDatabase","$sql");
    if (mysql_num_rows($reponse) > 0){
     
          while($row_taille = mysql_fetch_array($reponse)) {
     
    $taille = stripslashes($row_taille[taille]);
     
    // ici c'est pour séparer les tailles avec le tiret comme séparateur
    $mots = split(" - ", $taille);
    $nombre_de_taille = count($mots);
    $taille = explode("-", $taille);
     
    $i= 0; 
    while ( $i < $nombre_de_taille ) 
    {
     
    $option_taille="<option value=$taille[$i]  \">$taille[$i]</option>";
    echo "$option_taille // problème ici car j'affiche toutes les tailles 
    ";
    $i++;
    }
     
    	}
    }
    je suppose qu'il faut utilisé array_unique, mais je sais pas comment faire ??
    merci de votre aide !

    Lionel

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

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

    Pourquoi fais tu un split puis un explode ?
    Et à quoi sert ton stripslashes ?

    Il faut que tu rassemble toutes tes tailles dans un même tableau, puis que tu fasses l'affichage après. Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $tailles = array();
    while($row_taille = mysql_fetch_array($reponse))
    {
        $tailles_tmp = explode(' - ', $taille);
        $tailles = array_merge($tailles, $tailles_tmp);
    }
     
    $tailles = array_unique($tailles); 
    sort($tailles);
     
    foreach ($tailles as $taille)
    {
        echo '<option value="'.$taille.'">'.$taille.'</option>';
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut merci ! ça marche nickel
    ton code marche très bien, il manquait jusque une ligne :

    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
     
    $tailles = array();
    while($row_taille = mysql_fetch_array($reponse))
    {
        $taille = $row_taille[taille]; // ICI
        $tailles_tmp = explode(' - ', $taille);
        $tailles = array_merge($tailles, $tailles_tmp);
    }
     
    $tailles = array_unique($tailles); 
    sort($tailles);
     
    foreach ($tailles as $taille)
    {
        echo '<option value="'.$taille.'">'.$taille.'</option>';
    }
    MERCI !

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Tu aurais aussi pu faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $tailles_tmp = explode(' - ', $row_taille[taille]);
    (on aurait aussi pu se passer de la variable temporaire $tailles_tmp, mais le code me semble moins lisible dans ce cas)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut comment ordonner les résultats ?
    Comment ordonner la liste après svp ?
    Car dans la requette sql je tri l'ensemble des tailles, pas les tailles filtrées

    ça doit être la dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach ($tailles as $taille)
    {
        echo '<option value="'.$taille.'">'.$taille.'</option>';
    }
    Merci

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Je ne te suis pas trop, le sort() que tu fais précédemment n'effectue pas le tri ?

    Si non, quel type de tri veux tu effectuer et sur quelles valeurs ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    si le tri ce fait mais il se fait par groupe de traille explosé c'est a dire :
    par exemple :
    30 - 31 - 36 - 37
    29 - 30 - 31 -32
    32 - 33 - 34

    ça va sortir comme ça :
    30
    31
    37
    36
    29
    33
    34

    au lieu de sortir comme je veux :
    29
    30
    31
    32
    33
    34
    36
    37

    je suis claire ??

  8. #8
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Hmm je te suis, oui et non.
    C'est pas le boulot du sort() ca ? ^^

    Sinon quel est l'intéret d'avoir des groupes de tailles si c'est pour afficher les tailles à plats et sans distinction de groupe ?

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Hmm je te suis, oui et non.
    C'est pas le boulot du sort() ca ? ^^

    Sinon quel est l'intéret d'avoir des groupes de tailles si c'est pour afficher les tailles à plats et sans distinction de groupe ?
    +1

    Dans le code que j'avais donné, le tri se fait à la ligne
    Et pas dans la requête SQL...
    Donc je ne vois pas non plus où est le problème...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    en fait l'objectif c'est d'avoir un menu déroulant avec les tailles dispo des produits sans répétitions des tailles.

    comme j'ai par ligne de produits un champ qui donne les tailles dispo séparées par des tirets :

    produit 1 :
    Champ_tailles_dispo : L - XL - XXL

    produit 2 :
    Champ_tailles_dispo : S - L

    produit 3 :
    Champ_tailles_dispo : SS - S - L - XL

    Je veux donc un menu dérant avec :
    SS
    S
    L
    XL
    XXL

    mais pour l'instant le sort ordonne le champ des tailles_dispo, mais pas le résultat de : foreach ($tailles as $taille)

    tu vois ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    justement

    ordonnes la chaine tailles

    il me faudrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    foreach ($tailles as $taille)
    {
    sort($taille); // SANS LE S 
        echo '<option value="'.$taille.'">'.$taille.'</option>';
    }
    mais ça marche pas

  12. #12
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    $taille n'est pas un tableau c'est une chaine.
    Cette chaine contient-elle une seule taille ou un groupe de taille écrit de la forme : taille1-taille2-taille3 ?

    Si c'est un groupe :
    Alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach ($tailles as $taille)
        {
        $les_tailles = explode("-",$taille);
        sort($les_tailles);
        foreach($les_tailles as $t)
            {
             echo '<option value="'.$t.'">'.$t.'</option>';
            }
        }
    ?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    ça donne le même résultat
    voici le code complet avec la requet sql :

    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
    $sql_taille="SELECT taille from catalogue ";
    	}
     
    $reponse_taille  =  mysql("$DBDatabase","$sql_taille");
    if (mysql_num_rows($reponse_taille) > 0){
     
    $tailles = array();
    while($row_taille = mysql_fetch_array($reponse_taille))
    	{
    	$taille = $row_taille[taille];
    	$tailles_tmp = explode('-', $taille);
    	$toutes_les_tailles = array_merge($tailles, $tailles_tmp);
    	}
     
    $toutes_les_tailles = array_unique($toutes_les_tailles); 
    sort($toutes_les_tailles); // ICI ça ordonne les groupes de tailles
     
    foreach ($toutes_les_tailles as $les_tailles_sans_doublon)
    {
    // c'est là que je veux ordonné $les_tailles_sans_doublon
        echo '<option value="'.trim($les_tailles_sans_doublon).'">'.trim($les_tailles_sans_doublon).'</option>';
    }
    }

  14. #14
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Ok bah si tu regardes un post plus haut ya la solution, normalement tu dois avoir un premier tableau avec les groupes de tailles, et un autre avec les tailles.
    Pas la peine de faire un sort(); sur les groupes a mon avis.

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    sort($toutes_les_tailles) n'ordonne pas les groupes de tailles, mais les tailles directement !

    Les groupes de tailles ont été séparés en tailles avec l'explode...

  16. #16
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Justement ils n'aurient pas du etre séparés, car cela vous a fait perdre la notion de groupe.

    il aurait fallu garder les groupes et implémenter mon code pour chacun d'eux.

    $groups = array();
    // Premier groupe de tailles
    $groups[0] = array();
    // Liste des tailles du premier groupe
    $groups[0][0] = 29;
    $groups[0][1] = 31;

    .

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Si, il faut bien les séparer puisqu'il veut afficher l'ensemble des tailles disponibles quels que soient les articles (si j'ai bien compris).

    Et pas les tailles disponibles groupe par groupe...

  18. #18
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Ok donc quel est l'interet d'avoir des groupes de tailles si un produit peut avoir toutes les tailles ?

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    ben pourtant ça ordonne pas exemple :
    ici

    dans la liste des tailles c'est pas ordonné

  20. #20
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Oui on sait bien que ca ordonne pas .....
    Le problème ca vient pas du code ca vient du fait que la personne qui a posté le sujet ne sait pas exactement ce qu'elle veut faire.

    Au début la solution qu'on lui a donné c'était de mettre toutes les tailles à plats et les trier. Ce n'est pas la bonne car on perd la notion produit/tailles.

    Pour les tailles de chaque produit faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tailles = explode('-',$produit['tailles']);
    sort($tailles);
    foreach($tailles as $taille)
            {
            echo $taille;
            }
    je tiens aussi à préciser que sort(); fait un tri alphabétique. Soit trois nombres
    100 - 99 et 97.
    En triant avec sort() le résultat serait :
    100
    97
    99

    Et oui car 100 est bien de position alphabétique inférieure à 97.
    Ton problème vient peut-être de là.

    Dans tous les cas la solution t'as été donné une à plusieurs fois.

Discussions similaires

  1. [MySQL] Copier une table après un select distinct
    Par Whombat dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/06/2011, 17h43
  2. [Oracle -> MySQL] requête UPDATE d'après un SELECT
    Par Paul TOTH dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/03/2010, 13h50
  3. Réponses: 6
    Dernier message: 11/09/2006, 01h34
  4. Case à Cocher avec Requête SELECT DISTINCT
    Par Polo_973 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/04/2006, 18h35

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