Champ avec 2 valeurs doit ressortir 2 lignes

Résolu
cs_decaPeter Messages postés 19 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 2 août 2007 - 4 oct. 2006 à 16:55
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013 - 6 oct. 2006 à 18:48
Bonjour à tous :)


voila j'ai un petit casse tête a résoudre et je n'ai pas trouvé la solution...


J'ai une Table qui possède plusieurs champs dont un champ qui possède 2 valeurs.

Je m'explique:

champ1 / val1

champ2 / val2

champ3 / val3

jusque là pas de probleme MAIS j'ai ceci:

champ4 / val1, val2

champ5 / val2, val3


et là je voudrais que lorsque j'affiche mes lignes, que le champ4 et le champ5 ressortent 2 fois car ils ont 2 valeurs


Je classe ensuite mes résultats par valeur et je devrais avoir en sorti ceci:

champ1 / val1
champ4 / val1


champ2 / val2
champ4 / val2

champ5 / val2


champ3 / val3

champ5 / val3

comment puis je faire ca? j'utilise MySQL et PHP. donc si quelqu'un à une idée, je suis preneur car là je bloque...


MERCI A VOUS

7 réponses

JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
4 oct. 2006 à 20:56
Ceci devrait fonctionner...


<?php

// classe pour permetre le tri

class champvaleurs{

    // variables

    var $nom_champ;

    var $valeur_champ;

    // constructeur

    function champvaleurs($champ,$valeur){

        $this->nom_champ = $champ;

        $this->valeur_champ = $valeur;

    }

}

// méthode permétant de comparer les deux objets... (comparaison avec les mêmes critères que strcmp...)

function compare($valeur1,$valeur2){

        $cmp = 0;    //
valeur de comparaison (-1 si la premiere chaine est la plus "petite", 0
si egales, 1 sinon)

        // les valeurs

        $cmp = strcmp($valeur1->valeur_champ,$valeur2->valeur_champ);

        // si les valeurs sont égales, on trie par noms...

        if($cmp==0){

            $cmp = strcmp($valeur1->nom_champ,$valeur2->nom_champ);

        }

        return $cmp;

}

// méthode de tri d'un tableau(tribulle)

function tribulle($tableau){

    $bon = 0;

    while($bon!=1){

        // on doit trier!!!

        $bon = 1;

        for($i=0;$i<sizeof($tableau)-1;$i++){

            // si l'élément du bas est plus petit que celui du dessus, on inverse

            if(compare($tableau[$i],$tableau[$i+1])==1){

                // on permute

                $tmp = $tableau[$i];

                $tableau[$i] = $tableau[$i+1];

                $tableau[$i+1] = $tmp;

                // on doit encor vérifier s'il faut trier...

                $bon = 0;

            }

        }

    }

    return $tableau;

}

// fonction d'affichage

function affiche($tableau){

    for($i=0;$i<sizeof($tableau);$i++){

        echo $tableau[$i]->nom_champ . " / " . $tableau[$i]->valeur_champ ."
";

    }

}

// connexion mysql:

$db_link = mysql_connect("localhost","root","");

mysql_select_db("test");

$requete = mysql_query("SELECT * FROM table_test",$db_link)or die(mysql_error());

// lecture des resultats

    // tableau de stockage

    $nbval = 0;    // nombre de valeurs à trier et afficher

for($i=0;$i<mysql_num_rows($requete);$i++){

    // on lit les valeurs

    $nom = mysql_result($requete,$i,'nom_champ');

    $valeurs = mysql_result($requete,$i,'valeur_champ');

    $valeurs = explode(",",$valeurs);    // on découpe les valeurs

    for($j=0;$j<sizeof($valeurs);$j++){

        $tableau[$nbval] = new
champvaleurs($nom,$valeurs[$j]);    // on crée les objets

        $nbval++;

    }

}

// on trie

    $tableau = tribulle($tableau);

// on affiche

    affiche($tableau);

// fin mysql:

mysql_close($db_link);

?>
3
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
4 oct. 2006 à 18:01
donc si je comprends bien tu as une table mysql du type:

ma_table:

+--------------------+---------------------+

|     nom_du_champ   |   valeur_du_champ     |

+--------------------+---------------------+

|
champs1                 
|
val1                        
|

| champs2
                
| val2
                       
|

| champs3
                
| val3
                       
|

| champs4
                
|
val1                        
|

| champs4
                
| val2
                       
|

| champs5
                
| val3
                       
|

| champs5
                
| val4
                       
|

+--------------------+---------------------+

à ce stade là tu peux essayer ça:

<?php

$db_link = mysql_connect("serveur","user","pass");

mysql_select_db("mabase");

$requete = mysql_query("SELECT * FROM ma_table ORDER BY 'valeur_du_champ' ASC",$db_link)or die(mysql_error());

for($i=0;$i<mysql_num_rows($requete)){

    echo mysql_result($requete,$i,'nom_du_champ')." /
".mysql_result($requete,$i,'valeur_du_champ') ."
";

}

mysql_close($db_link);

?>


voilà

J'ai codé ça de tête donc c'est plus que probable que j'aie fait des erreurs et qu'on puisse améliorer ce truc...
0
cs_decaPeter Messages postés 19 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 2 août 2007
4 oct. 2006 à 20:04
merci pour ta réponse :) mais ce n'est pas exactement ca... si ma table etait comme tu l'as écrite, je n'aurais pas de probleme...ma table se présente ainsi:

+--------------------+---------------------+
|     nom_du_champ   |   valeur_du_champ   |
+--------------------+---------------------+
| champs1                  | val1                         |
| champs2                  | val2                         |
| champs3                  | val3                         |
| champs4                  | val1, val2                 |
| champs5                  | val2, val3                 |
+--------------------+---------------------+

est ce que ca te parle plus ?
et je voudrais ressortir ca:
champ1 / val1
champ4 / val1
champ2 / val2
champ4 / val2
champ5 / val2
champ3 / val3
champ5 / val3

merci encore!!!!!
0
cs_decaPeter Messages postés 19 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 2 août 2007
5 oct. 2006 à 09:54
alors la! je suis baba...ton code fonctionne a merveille et du 1er coup :)


il ne me reste plus qu'a l'adapter a ma tripoté de champs et je croise les doigts que ca fonctionne...


merci beaucoup pour ton aide et pour le temps que tu y as consacré
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
5 oct. 2006 à 12:45
De rien, ce fut un plaisir de trouver quelque chose d'un peu
stimulant... en plus ca m'a permi d'apprendre la base des classes...
tout benef quoi!!!
0
cs_decaPeter Messages postés 19 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 2 août 2007
5 oct. 2006 à 13:41
oki :) et bien dès que j'en ai un autre de bien tordu je te fais signe lol.


bon sinon apres plusieurs tests et petit craquage de cheveux j'ai réalisé qu'il fallait SUPPRIMER les ESPACES apres la virgule, sinon le trie etait faussé par moment...


donc encore merci et @+
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
6 oct. 2006 à 18:48
si l espace est nécessaire, tu peux essayer de remplacer "," par ", " dans explode...
0
Rejoignez-nous