Salut à tous, je suis débutant en php. Et malgré tout les bon Tuto que l'on peut trouver je rame sec dès que l'on sort du cadre des Tuto.

Bon voilà je suis en train de bosser sur un modèle de table intervallaire, afin de gérer des catégories.

Ma Table avec quelque champs remplie.

-- Base de données: `tree`
--
-- --------------------------------------------------------
--
-- Structure de la table `rayonnage`
--
CREATE TABLE IF NOT EXISTS `rayonnage` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `lft` int(11) NOT NULL,
  `rght` int(11) NOT NULL,
  `parent_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
--
-- Contenu de la table `rayonnage`
--
INSERT INTO `rayonnage` (`id`, `name`, `lft`, `rght`, `parent_id`) VALUES
(1, 'alimentation', 1, 14, 0),
(2, 'legumes', 2, 7, 1),
(3, 'tomates', 3, 4, 2),
(4, 'courgettes', 5, 6, 2),
(5, 'boucherie', 8, 13, 1),
(6, 'agneau', 9, 10, 5),
(7, 'boeuf', 11, 12, 5),
(8, 'multimedia', 15, 20, 0),
(9, 'music', 16, 17, 8),
(10, 'Cinema', 18, 19, 8);

Donc je me faits des petits test afin d'interroger ma table :

<?php
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=tree', 'root', '', $pdo_options);

    $reponse = $bdd->query('SELECT * FROM rayonnage WHERE lft > 1 AND rght < 14 ');

    while ($donnees = $reponse->fetch())
    {
        echo ' La categorie ' .$donnees'name']. ' appartient au rayon '. $donnees'parent_id'] . '<br />';
    }    
    $reponse->closeCursor();}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>

Donc cela m'affiche bien les catégories ayant des bord compris entre 2 et 13. Et à l'affichage j'obtient donc:

La categorie légumes appartient au rayon 1
La categorie tomates appartient au rayon 2
La categorie courgettes appartient au rayon 2
La categorie boucherie appartient au rayon 1
La categorie agneau appartient au rayon 5
La categorie boeuf appartient au rayon 5

Seulement j'aimerais qu'au lieu de m'afficher la valeur du parent_id. Que cela m'affiche le nom du rayon associé à ce parent_id.

ex : La categorie légumes appartient au rayon alimentation
La categorie tomates appartient au rayon légumes.

Mais voilà newbie power oblige. Je ne sais pas comment faire.

2 réponses


jo2s
Réponse acceptée

Bonjour,

A priori il te faut faire une nouvelle requête qui récupère le name de ton rayonnage en fonction du parent_id récupéré précédemment.

Remplacer :

while ($donnees = $reponse->fetch())  
    {  
        echo ' La categorie ' .$donnees'name']. ' appartient au rayon '. $donnees'parent_id'] . '<br />';  
    }

Par :

while ($donnees = $reponse->fetch())  
    {  
        $rayon = $bdd->query('SELECT * FROM rayonnage WHERE parent_id = '.$donnees'parent_id'].' ');
        $res_rayon = $rayon->fetch();
        echo ' La categorie ' .$donnees'name']. ' appartient au rayon '. $res_rayon'name'] . '<br />';  
    }

A tester

Yop ça marche !!!

Juste une petite modification au niveau du WHERE :

$rayon = $bdd->query('SELECT * FROM rayonnage WHERE id = '.$donnees'parent_id'].' ');

Merci mille fois !! :) :)