Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/03/2010, 12h11   #1
Invité de passage
 
Inscription : février 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 13
Points : 0
Points : 0
Par défaut afficher une catégorie et ses sous catégories

salut,
Je suis une quiche en mysql c'est pas drôle.
Ça, c'est fait !
Je souhaite afficher les catégories et sous catégories qui s'y réfèrent qui sont dans une table. Là, il me met "Subquery returns more than 1 row "...

Code :
1
2
3
4
5
6
7
SELECT name, uid 
FROM `tx_avotherresources_cat` 
WHERE subcatof LIKE (
  select uid 
  from `tx_avotherresources_cat` 
  WHERE subcatof =0
)
nb :
>uid = les id des catégories
>les catégories de 1er niveau (qui ne sont pas dans des sous cat) ont un subcatof = 0 sinon c'est une sous cactégorie.

Merci à tous pour votre aide

Dernière modification par ced ; 08/03/2010 à 12h32.
idoomy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 12h40   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur développement logiciels
Inscription : août 2006
Messages : 10 058
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 058
Points : 16 368
Points : 16 368
Envoyer un message via MSN à CinePhil
Il faut faire une auto-jointure.
Ca devrait donner un truc dans le genre :
Code :
1
2
3
4
SELECT t1.name AS cat, t2.name AS subcat
FROM tx_avotherresources_cat AS t1
INNER JOIN tx_avotherresources_cat AS t2 ON t2.subcatof = t1.uid
ORDER BY t1.name, t2.name
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 13h43   #3
ced
Rédacteur/Modérateur
 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 778
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 778
Points : 6 207
Points : 6 207
Bonjour,

Bien sûr, l'auto-jointure ne ramène que le premier niveau de sous-catégorie.
S'il y en a plusieurs, ça se complique et il faut faire appel à de la récursivité, ou alors revoir le modèle de données, comme expliqué dans cet excellent tutoriel : http://sqlpro.developpez.com/cours/arborescence/

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 11h45   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur développement logiciels
Inscription : août 2006
Messages : 10 058
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 058
Points : 16 368
Points : 16 368
Envoyer un message via MSN à CinePhil
La structure que tu donnes est celle que j'avais supposée.
As-tu essayé d'adapter ma requête à ta structure exacte ?

Comme l'a dit ced, si tu n'as qu'un niveau de sous-catégorie, la requête fonctionnera. Si tu en as plus, ce sera plus compliqué ; il faut autant d'instance de la table qu'il y a de niveaux. Ou sinon passe à la représentation intervallaire, comme suggéré par ced.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 12h03   #5
Invité de passage
 
Inscription : février 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par CinePhil Voir le message
Il faut faire une auto-jointure.
Ca devrait donner un truc dans le genre :
Code :
1
2
3
4
SELECT t1.name AS cat, t2.name AS subcat
FROM tx_avotherresources_cat AS t1
INNER JOIN tx_avotherresources_cat AS t2 ON t2.subcatof = t1.uid
ORDER BY t1.name, t2.name
merci cinephil,
j'ai pas saisi ta requete je compren pas bien ensuite comment affichir les résultats, genre echo de.. quoi ? j'ai essaillé de t1.nam ou cat et.. rien

j'ai fais ça :

Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
$sql="select uid, name from tx_avotherresources_cat WHERE subcatof =0";
        $rt=mysql_query($sql);                     
        while ($data= mysql_fetch_array($rt));
          { 
           echo $data['name'].'<br />';
            $sql1="SELECT name FROM tx_avotherresources_cat where subcatof='$data[uid]'";  
            $rt1=mysql_query($sql1);                         
            $dataprod= mysql_fetch_array($rt1);
 
            echo '----'.$dataprod['name'].'<br />';
 
        }

et ça m'affiche un truc débile genre uniquememnt la 1er cat.. c'est tout

pffff
idoomy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 18h46.


 
 
 
 
Partenaires

Hébergement Web