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 :

Faire un tableau à partir d'un champ d'une table à plusieurs valeurs


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Par défaut Faire un tableau à partir d'un champ d'une table à plusieurs valeurs
    Bonjour à tous,

    une question : j'ai une table " bouquets" dans laquelle j'ai un champ "bouquet_channels " (je travaille avec PhpMyAdmin)
    ou j'ai mis plusieurs valeurs id (dans ce champ bouquet_channels bien séparés )

    exp:

    bouquet_name bouquet_channel

    france ["1","6","7","50","51","2","3",]


    je veux récupérer les noms de toutes les chaines disponibles pour ce bouquet

    sachant que part, j'ai une table Table: streams avec l'id de chaque chaine et sa description : stream_display_name
    id: Name:
    1 TF1
    2 M6
    3 W9
    4 NRJ12
    5 6TER
    6 FRANCE 2
    etc ...



    mon premier page me donne bien un tableau de tous mes chaines avec leur id


    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
     
    <?php
     
      include("connexion.php");
     
     $rs2 = mysql_query("SELECT `id`,`stream_display_name` FROM `streams` ");
     
    ?>
     
    <body>
     
     
    <section id="main" class="column"> 
    <article class="module width_full">
    <div id="form_container">
    <form action="#" method="get">
     
     
    <table border="2px">
        <th align="center">
     
    ID DS CHAINES
     
        </th>
        <tr>
     
        <td>id:</td>
        <td>Name:</td>
        </tr>
     
    	<?php
    	while($res=mysql_fetch_assoc($rs2))
    	{
     
    	$id = Array();
    	echo "<tr>";
     
    	echo "<td>".$res['id']."</td>";
    	echo "<td>".$res['stream_display_name']."</td>";
    	echo "</tr>";
     
         }
    echo $res['id'] ;
    	?>
     
    </table>
     
    </div>
    <div id='chart_div'></div>
     
    </body>
     
    </html>


    mon deusième page me donne tous les id des chaines dans mon bouquet

    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
     
    <?php
     
      include("connexion.php");
     // Create an array to hold our results
       $arr = array();
     
      $rs = mysql_query("SELECT bouquet_channels FROM  `bouquets` WHERE bouquet_name =  'france' ");
     
      // Add the rows to the array 
       while($obj = mysql_fetch_object($rs)) 
     
       {
       $arr = $obj;
     
     } 
     
       echo json_encode($arr);
       mysql_close();
     
     
     
    ?>


    Que dois-je faire pour recupérer un tableau de mon bouquet France ["1","6","7","50","51","2","3",]

    comme cet exemple


    id Name:

    1 TF1
    6 FRANCE 2
    7 FRANCE 3
    50 FRANCE 24
    51 FRANCE 5
    2 M6
    3 W9


    Pouvez-vous m'aider ?
    d'avance merci pour votre aide précieuse

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Bonjour,
    De ce que je comprend vous utilisez json_encode et json_decode pour mettre votre tableau d'id dans la db.
    Dans ce cas il faut travailler en deux étapes.

    D'abord un petit rappel, les fonctions mysql_ sont déprécié et il faut leur préférer les fonctions mysqli_ ou PDO.

    Première étape on récupère les id de la table bouquets :

    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
     
    include("connexion.php");
     // Create an array to hold our results
       //$arr = array();
    // nouvel nomeclature de tableau
    $arr = []
     
    $rs = mysqli_query("SELECT bouquet_channels FROM  `bouquets` WHERE bouquet_name =  'france' LIMIT 1 ");
    //comme un seul pays s'appelle France, une seul ligne devrais être retourné
     
    /**
    *Faut vérifier ici si le while est nécéssaire
    */
      // Add the rows to the array 
     $obj = mysqli_fetch_object($rs) 
     $arr = json_decode = $obj->bouquet_channels;
     
    //ensuite on fait une requête qui va chercher tout les éléments du tableau
    // on transforme le tableau en texte
     
    $comma_separated = implode(",", $arr);
     
    //puis on fait la requête en utilisant la fonction IN de SQL
     
    $rs2 = mysqli_query("SELECT `id`,`stream_display_name` FROM `streams` WHERE id IN  (". $comma_separated.")" );
     
    //suite de la requête .

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il existe une solution "simple", mais il faut :

    • que bouquet_channel soit de la forme 1,6,7,50,51,2,3 (séparés uniquement par des virgules)
    • utiliser FIND_IN_SET (un exemple ici)


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query = "SELECT * ".
    		" FROM TAB_TEST t1 ".
    		" INNER JOIN TAB_TEST2 t2 ".
    			" ON FIND_IN_SET( t2.idtype, t1.liste_ids ) != 0 ".
    		" AND t2.idtype = 3 ". // valeur
    		" ;";
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = "SELECT t1.bouquet_name, ...... ".
    		" t2.id, t2.Name ".
    		" FROM bouquets t1 ".
    		" INNER JOIN streams t2 ".
    			" ON FIND_IN_SET( t2.id, t1.bouquet_channel ) != 0 ".
    		" WHERE ..... ". // valeur
    		" ;";
    Dernière modification par Invité ; 19/08/2016 à 16h42.

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Par défaut
    merci pour votre aide précieuse

    Mais pour le code php suivant :

    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
     
    <?php
    include("connexion.php");
    $arr = [] ;
    $rs = mysql_query("SELECT bouquet_channels FROM  `bouquets` WHERE bouquet_name = 'GHEZAL' LIMIT 1 ");
     
     
     // Add the rows to the array 
     while($obj = mysql_fetch_object($rs)){
     
     $arr[] = $obj;
     
     
        } 
     
     echo json_encode($arr); 
     
      mysql_close();
     
    ?>
    ma page retourne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      [{"bouquet_channels":"[\"338\",\"9\",\"31\",\"32\",\"38\",\"33\",\"30\",\"39\",\"40\",\"36\",\"34\",\"37\",\"35\",\"52\",\"53\",\"54\",\"55\",\"251\",\"253\",\"249\",\"248\",\"247\",\"246\",\"245\",\"400\",\"46\",\"237\",\"49\",\"48\",\"47\",\"45\",\"44\",\"43\",\"42\",\"41\",\"240\",\"398\",\"397\",\"399\",\"250\",\"252\",\"217\",\"218\",\"219\",\"239\",\"221\",\"223\",\"222\",\"225\",\"224\",\"220\",\"226\",\"227\",\"228\",\"229\",\"230\",\"231\",\"232\",\"233\",\"234\",\"235\",\"236\",\"238\",\"244\",\"242\",\"243\",\"241\",\"258\",\"257\",\"256\",\"255\",\"254\",\"198\",\"197\",\"305\",\"191\",\"194\",\"196\",\"195\",\"192\",\"193\",\"391\",\"395\",\"392\",\"339\",\"332\",\"207\",\"206\",\"209\",\"180\",\"181\",\"56\",\"57\",\"58\",\"59\",\"60\",\"311\",\"331\",\"387\",\"388\",\"333\",\"334\",\"335\",\"313\",\"340\",\"203\",\"200\",\"61\",\"63\",\"64\",\"62\",\"389\",\"390\",\"1\",\"2\",\"6\",\"7\",\"50\",\"51\",\"261\",\"3\",\"4\",\"167\",\"271\",\"272\",\"276\",\"89\",\"90\",\"78\",\"403\",\"77\",\"205\",\"84\",\"23\",\"8\",\"76\",\"69\",\"14\",\"5\",\"187\",\"314\",\"186\",\"95\",\"96\",\"337\",\"16\",\"17\",\"15\",\"18\",\"94\",\"92\",\"19\",\"111\",\"393\",\"394\",\"24\",\"26\",\"28\",\"27\",\"25\",\"216\",\"79\",\"29\",\"65\",\"66\",\"67\",\"306\",\"201\",\"182\",\"402\",\"401\",\"316\",\"307\",\"309\",\"259\",\"184\",\"10\",\"11\",\"82\",\"83\",\"13\",\"80\",\"202\",\"81\",\"262\",\"308\",\"22\",\"169\",\"86\",\"20\",\"168\",\"98\",\"185\",\"204\",\"93\",\"75\",\"304\",\"87\",\"97\",\"21\",\"348\",\"343\",\"268\",\"270\",\"287\",\"286\",\"266\",\"280\",\"281\",\"279\",\"188\",\"165\",\"164\",\"264\",\"274\",\"263\",\"163\",\"162\",\"278\",\"277\",\"157\",\"158\",\"159\",\"160\",\"161\",\"344\",\"303\",\"302\",\"301\",\"300\",\"290\",\"289\",\"288\",\"295\",\"294\",\"293\",\"292\",\"291\",\"298\",\"299\",\"296\",\"175\",\"285\",\"267\",\"166\",\"265\",\"275\",\"345\",\"282\",\"273\",\"328\",\"324\",\"330\",\"178\",\"329\",\"326\",\"327\",\"325\",\"211\",\"210\",\"269\",\"284\",\"283\",\"317\",\"318\",\"319\",\"320\",\"321\",\"322\",\"323\",\"70\",\"71\",\"72\",\"73\",\"74\",\"346\",\"357\",\"358\",\"364\",\"359\",\"360\",\"363\",\"362\",\"361\",\"365\",\"171\",\"173\",\"172\",\"170\",\"369\",\"372\",\"371\",\"373\",\"366\",\"368\",\"367\",\"370\",\"374\",\"375\",\"376\",\"381\",\"379\",\"377\",\"382\",\"380\",\"378\",\"384\",\"383\",\"174\",\"342\",\"350\",\"351\",\"112\",\"349\",\"356\",\"114\",\"115\",\"353\",\"355\",\"352\",\"120\",\"103\",\"105\",\"121\",\"104\",\"107\",\"123\",\"122\",\"177\",\"113\",\"102\",\"354\",\"176\",\"124\",\"125\",\"117\",\"118\",\"119\",\"341\",\"140\",\"141\",\"142\",\"129\",\"135\",\"139\",\"154\",\"127\",\"212\",\"131\",\"132\",\"133\",\"130\",\"405\",\"406\",\"407\",\"408\",\"409\",\"126\",\"152\",\"153\",\"128\",\"137\",\"151\",\"155\",\"156\",\"134\",\"148\",\"149\",\"150\",\"138\",\"404\",\"413\",\"412\",\"414\",\"415\",\"410\",\"411\",\"136\",\"143\",\"144\",\"145\",\"146\",\"147\"]"}]
    donc pouvez vous m'expliquer l'utilité de cette ligne car quand je l'utilise ma page ne fonctionne plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $arr = json_encode = $obj->bouquet_channels;
    cordialement.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Par défaut
    Bonsoir
    finalement voila ma solution merci pour votre aide

    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
     
     
    <?php
    include("connexion.php");
    $arry = array();
    //enrgistre dans un fichier text
    $rs = mysql_query("SELECT bouquet_channels INTO OUTFILE '/var/tmp/liste.txt' FROM  `bouquets`    WHERE bouquet_name =  'farance'    ");
     
    $json_string = '/var/tmp/liste.txt';
    $jsondata = file_get_contents($json_string);
    $obj = json_decode($jsondata,true);
     
    $comma_separated = implode(",", $obj);
     
       // ORDER BY FIELD pour conserver l'ordre des chaines
     $rs2 = mysql_query("SELECT `id`,`stream_display_name` FROM `streams`  WHERE id IN ($comma_separated) ORDER BY FIELD(`id`,$comma_separated) ");
     
     
     
     
     
    	while($res2=mysql_fetch_assoc($rs2))
    	{
     
    	$arry = $res2;
    	echo "<pre>";
    	echo $arry['stream_display_name'] ;
     
         }
     
     
       mysql_close();
    ?>
    votre avis ?

Discussions similaires

  1. Générer listes dynamiques à partir de deux champs d'une table
    Par zen'it dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 15/04/2016, 11h44
  2. [AC-2013] "faire pivoter" les informations de 2 champs d'une table
    Par JulienEvrard dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/10/2014, 15h01
  3. Réponses: 2
    Dernier message: 22/06/2012, 16h17
  4. Comment faire pour entrer plus de 255 champs dans une table.
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/03/2009, 19h35
  5. [Tableaux] Faire un tableau à partir d'une string
    Par hugo69 dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 10h49

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