Aller au contenu

aide pour une requete


dr3amerz

Sujets conseillés

Salut a tous

Je vous explique mon probleme :

j'ai essayé cette requete :

SELECT r.titre
FROM documents_articles da, articles a, rubriques r
WHERE da.id_document=118
AND a.id_article=da.id_article
AND r.id_rubrique=a.id_rubrique

qui marche très bien mais quand je fais celle la :

SELECT r.titre
FROM documents_articles da, articles a, rubriques r
WHERE da.id_document=118
AND a.id_article=da.id_article
AND r.id_rubrique=a.id_rubrique
AND 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é par dr3amerz
Lien vers le commentaire
Partager sur d’autres sites

SELECT r.titre
FROM documents_articles da, articles a, rubriques r
WHERE da.id_document=118
AND a.id_article=da.id_article
AND r.id_rubrique=a.id_rubrique
AND 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 ?

Lien vers le commentaire
Partager sur d’autres sites

Pardon, il y a une erreur, la parenthèse ouvrante doit être avant la table a :

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

Lien vers le commentaire
Partager sur d’autres sites

Posté (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 :

19rl1.jpg

Je vais donc dans la table document_article ou un article est associé a un document :

22ig.jpg

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 :

36ya.jpg

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 :

42kx.jpg

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é par dr3amerz
Lien vers le commentaire
Partager sur d’autres sites

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é par Rapace15
Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.titre
FROM document d
INNER JOIN documents_articles da ON d.id_document = da.id_document
INNER JOIN articles a ON da.id_article = a.id_article
INNER JOIN rubriques r1 ON a.id_rubrique = r1.id_rubrique
INNER JOIN rubriques r2 ON r1.id_parent = r2.id_rubrique
WHERE d.titre = '$titre'

Lien vers le commentaire
Partager sur d’autres sites

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, rubrique
where 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.

Lien vers le commentaire
Partager sur d’autres sites

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_rubrique
WHERE 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

Lien vers le commentaire
Partager sur d’autres sites

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é.

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...