dr3amerz Posté 1 Juin 2005 Posté 1 Juin 2005 (modifié) Salut a tous Je vous explique mon probleme : j'ai essayé cette requete : SELECT r.titreFROM documents_articles da, articles a, rubriques r WHERE da.id_document=118AND a.id_article=da.id_articleAND r.id_rubrique=a.id_rubrique qui marche très bien mais quand je fais celle la : SELECT r.titreFROM documents_articles da, articles a, rubriques rWHERE da.id_document=118AND a.id_article=da.id_articleAND r.id_rubrique=a.id_rubriqueAND r.id_rubrique=r.id_parent car en fait j'ai une ligne dans ma base de donnée dans la table rubriques ou : id_rubrique = 23 et id_parent = 7 et une autre ligne ou id_rubrique = 7 et je veux selectionner un champ de la ligne ou id_rubrique = 7 mais ca ne marche pas comment faire svp ? Modifié 1 Juin 2005 par dr3amerz
Rapace15 Posté 1 Juin 2005 Posté 1 Juin 2005 SELECT r.titreFROM documents_articles da, articles a, rubriques rWHERE da.id_document=118AND a.id_article=da.id_articleAND r.id_rubrique=a.id_rubriqueAND r.id_rubrique=r.id_parent <{POST_SNAPBACK}> Je ne comprends pas trop ta syntaxe... Si j'ai bien compris tu fais une requête avec des plusieurs tables liées... Essaye ceci : SELECT r.titre FROM r INNER JOIN a (INNER JOIN da ON a.id_article=da.id_article) ON r.id_rubrique=a.id_rubrique WHERE da.id_document=118 Par contre, je n'ai pas compris pourquoi tu mets r.id_rubrique=r.id_parent ? tu cherche un enregistrement pour lequel ces valeurs sont égales ?
Rapace15 Posté 1 Juin 2005 Posté 1 Juin 2005 Pardon, il y a une erreur, la parenthèse ouvrante doit être avant la table a : SELECT r.titre FROM rINNER JOIN (a INNER JOIN da ON a.id_article=da.id_article)ON r.id_rubrique=a.id_rubriqueWHERE da.id_document=118
dr3amerz Posté 1 Juin 2005 Auteur Posté 1 Juin 2005 (modifié) Je vous ai fait des screenshot pour que ce soit + inteligible : Je veux acceder a la marque de ce vetement dont le titre est mamba : Je vais donc dans la table document_article ou un article est associé a un document : Ensuite je vais dans la table article pour trouver l'article en question que j'ai recuperer dans la table precedente et trouver donc dans cette table articles , id_rubrique : et pour finir je vais dans la table rubrique ou je retrouve la rubrique correspondante , mais c'est la rubrique pere de cette rubrique que je veux : C'est pour ca que j'ai utilisé id_rubrique=id_parent j'espere que c'est plus clair hesitez pas a me poser des questions merci Modifié 1 Juin 2005 par dr3amerz
Rapace15 Posté 1 Juin 2005 Posté 1 Juin 2005 (modifié) Je vois un peu mieux effectivement.. le fait de mettre id_rubrique=id_parent fait qu'il cherche un enregistrement pour lequel Id_rubrique = id_parent (ce qui n'est pas le cas) Si j'ai bien compris, au début tu connais l'Id_rubrique parent (dans ton exemple 7) donc ta requête serait celle ci SELECT documents.titre AS Marque FROM documents INNER JOIN (document_article INNER JOIN (articles INNER JOIN rubrique ON articles.id_rubrique=rubrique.id_rubriques) ON document_article.id_article=articles.id_article) ON documents.id_document=document_article.id_document WHERE id_parent = 7 Petit conseil : essaye de normaliser le nommage des tables, tu risques vite de t'y perdre avec tes noms une fois au pluriel une fois au singulier... Bon dev Modifié 1 Juin 2005 par Rapace15
dr3amerz Posté 1 Juin 2005 Auteur Posté 1 Juin 2005 ca ne marche pas malheresement , mais je ne connais pas a l'avance l'id parent , je connais l'id document
Rapace15 Posté 1 Juin 2005 Posté 1 Juin 2005 Donc à quelque chose près, c'est l'inverse qu'il faut faire... Je reprend tu connais l'id_document et tu cherche le titre du document ?
dr3amerz Posté 1 Juin 2005 Auteur Posté 1 Juin 2005 pour resumer je recherche le titre de la rubrique parente a la rubrique qui correspond a l'article qui lui meme correspond a un document sachant que je connais l'id_document lol
MarvinLeRouge Posté 1 Juin 2005 Posté 1 Juin 2005 Bon alors SI j'ai bien compris (ce qui est à mettre en doute étant donné l'heure et mon niveau de fatigue), ça donnerait SELECT r2.titreFROM document d INNER JOIN documents_articles da ON d.id_document = da.id_documentINNER JOIN articles a ON da.id_article = a.id_articleINNER JOIN rubriques r1 ON a.id_rubrique = r1.id_rubriqueINNER JOIN rubriques r2 ON r1.id_parent = r2.id_rubriqueWHERE d.titre = '$titre'
Vincent Posté 1 Juin 2005 Posté 1 Juin 2005 donc si j'ai bien compris, il faut aller chercher l'ID parent a partir de l'information "Mamba"... après un rapide coup d'oeuil, cela doit donner une requete du genre : select * from documents, document_article, articles, rubriquewhere documents.id_document = document_article.id_document and document_article.id_article = articles.id_article and articles.id_rubrique = rubrique.id_rubrique and documents.titre like "Mamba" Mais il est clair qu'il faudrait normaliser un peu le nommage des tables et des champs.
Rapace15 Posté 1 Juin 2005 Posté 1 Juin 2005 Donc pour faire court tu connais le titre du document :Mamba Moi je le traiterais en deux requêtes : 1/ Je cherche l'id_rubrique correspondant : $sql1 = "SELECT rubrique.id_parent FROM rubrique INNER JOIN(article INNER JOIN (document_article INNER JOIN documents ON document_article.id_document=documents.id_document)ON articles.id_article=document_article.id_article) ON rubrique.id_rubrique = articles.id_rubriqueWHERE documents.titre ='mamba'";$resul_1 = mysql_query($sql1);$rub_enfant=mysql_fetch_array($resul_1); Tu devrait obtenir un résultat (ici 7) et ensuite tu cherches le titre de ta rubrique parent $sql2 = "SELECT titre FROM rubrique WHERE id_rubrique=".$rub_enfant[0]; voilà comment je le gèrerais
MarvinLeRouge Posté 2 Juin 2005 Posté 2 Juin 2005 As-tu testé la requète que je t'ai proposée ? NB : A priori, je ne vois aucune nécessité de faire 2 requètes : on peut tout à fait faire 2 jointures de la même table sous 2 alias différents comme dans le code que j'ai montré.
Rapace15 Posté 2 Juin 2005 Posté 2 Juin 2005 As-tu testé la requète que je t'ai proposée ? NB : A priori, je ne vois aucune nécessité de faire 2 requètes : on peut tout à fait faire 2 jointures de la même table sous 2 alias différents comme dans le code que j'ai montré. <{POST_SNAPBACK}> Tu as tout à fait raison, il n'y a aucune raison que cela ne marche pas. C'est seulement que tu a du répondre pendant que je faisis la mienne et que je ne pense jamais aux alias des tables (et donc je passe quasiment toujours par ce genre de méthode). Mais les deux devraient marcher... à dr3amerz de choisir celle qu'il veut
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant