plusieurs jointures dans une meme requete

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : plusieurs jointures dans une meme requete

par Invité » 04 mars 2006, 20:47

Non, il y avait bien deux tables :) Merci beacoup !!! Ca fonctionne de façon impeccable, je vais le tester dans mon script :)

Merci encore !!!

par Cyrano » 04 mars 2006, 20:27

Ok, sous réserve, essaye ceci (directement phpMyAdmin en mettant un identifiant en dur, tu convertira en PHP quand ce sera fonctionnel)

Code : Tout sélectionner

SELECT fr1.IdRub, fr2.idRubMere, fr1.NameRub, fr2.NameRub FROM forum_topics as ft, forum_rub as fr1 LEFT JOIN forum_rub as fr2 ON fr1.IdRubMere = fr2.IdRub WHERE ft.tid = 'variable' AND ft.forum_id = fr1.IdRub;
Mais ceci ne prend que les deux tables que tu as indiqué, j'avais cru comprendre qu'il y en avait une troisième :?:

par Invité » 04 mars 2006, 20:10

Je vais essayer d'éclaircir et tu vas me confirmer :
- Tu as x catégories;
- Chaque catégorie peut contenir y rubriques;
- Pour chaque rubrique, tu auras z forums;
- Dans chaque forum tu auras nn topics;

Tu veux trouver l'arborescence parente correspondant à l'identifiant du topic envoyé en paramètre dans l'url : c'est ça ?
c'est un peu plus simple : les rubriques contenues dans catégories, ce sont les forums

- J'ai x catégories;
- Chaque catégorie peut contenir y forums;
- Dans chaque forum il y a nn topics;
Effectivement il s'agit de trouver l'arbo parente correspondant à l'identifiant du topic ($id) envoyé en paramètre dans l'url :)

par Cyrano » 04 mars 2006, 20:03

Je vais essayer d'éclaircir et tu vas me confirmer :
- Tu as x catégories;
- Chaque catégorie peut contenir y rubriques;
- Pour chaque rubrique, tu auras z forums;
- Dans chaque forum tu auras nn topics;

Tu veux trouver l'arborescence parente correspondant à l'identifiant du topic envoyé en paramètre dans l'url : c'est ça ?

par Invité » 04 mars 2006, 18:01

Il s'agit d'une page qui affiche les posts d'un topic. Il s'agit de retracer l'arborescence de la page. C'est à dire, le nom du topic et l'ID (tid) du forum (id_forum) auquel appartien le topic, à partir de l'ID contenue dans l'URL ($id, table forums_topics). Ensuite, il faut récupérer dans la table forum_rub le nom du forum contenant le topic (NameRub), et la catégorie mère de ce forum (IdRubMere) à partir du forum_id obtenu dans la table forum_topics. Ensuite, à partir de l'IdRubMere obtenu précédement, il faut récupérer le nom de la catégorie mère associé à cet IdRubMere, donc càd, le nom de la catégorie pour laquelle IdRub est égale à l'IdRubMere précédent.

Code : Tout sélectionner

CREATE TABLE `forum_topics` ( `tid` int(10) NOT NULL auto_increment, // ID du topic `title` varchar(250) NOT NULL default '', // nom du topic `description` varchar(70) default NULL, `state` varchar(8) default NULL, `posts` int(10) default NULL, `starter_id` mediumint(8) NOT NULL default '0', `start_date` int(10) default NULL, `last_poster_id` mediumint(8) NOT NULL default '0', `last_post` int(10) default NULL, `icon_id` tinyint(2) default NULL, `starter_name` varchar(32) default NULL, `last_poster_name` varchar(32) default NULL, `poll_state` varchar(8) default NULL, `last_vote` int(10) default NULL, `views` int(10) default NULL, `forum_id` smallint(5) NOT NULL default '0', // ID du forum père `approved` tinyint(1) default NULL, `author_mode` tinyint(1) default NULL, `pinned` tinyint(1) default NULL, `moved_to` varchar(64) default NULL, `rating` text, `total_votes` int(5) NOT NULL default '0', PRIMARY KEY (`tid`), KEY `last_post` (`last_post`), KEY `forum_id` (`forum_id`,`approved`,`pinned`), FULLTEXT KEY `title` (`title`) ) TYPE=MyISAM AUTO_INCREMENT=477 ; CREATE TABLE `forum_rub` ( `IdRub` int(11) NOT NULL auto_increment, // N° de la rubrique ou catégorie `NameRub` text NOT NULL, // Nom de la rubrique ou catégorie `IdRubMere` int(11) NOT NULL default '0', // N° de la catégorie mère, = 0 s'il s'agit d'une catégorie mère `StateRub` int(11) NOT NULL default '1', `Description` text NOT NULL, `NbTopics` int(11) NOT NULL default '0', `NbPosts` int(11) NOT NULL default '0', `LastPost_Date` int(10) NOT NULL default '0', `LastPoster` varchar(50) NOT NULL default '', `LastPoster_Id` int(11) NOT NULL default '0', `IdLast` int(11) NOT NULL default '0', PRIMARY KEY (`IdRub`) ) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=21 ;
Voilà...

par Cyrano » 04 mars 2006, 16:16

DIs nous donc exactement ce que tu veux obtenir en nous précisant la structure des trois tables qu'on sache quel colonne correspond à quoi.

plusieurs jointures dans une meme requete

par Invité » 04 mars 2006, 16:09

Bonjour,
je souhaiterais faire plusieurs jointures dans une meme requete, mais ça ne marche pas, je pense que c'est un problème de syntaxe. Pouvez vous m'aiguiller ?
Voici la requete :
$sql = "SELECT R0.title, R0.forum_id, R1.NameRub as rub1, R1.IdRubMere, R2.IdRub, R2.NameRub as rub2 FROM forum_topics R0 LEFT JOIN forum_rub R1 INNER JOIN forum_rub R2 ON (R1.IdRubMere = R2.IdRub) WHERE R0.tid='$id";
Voici l'erreur renvoyée : You have an error in your SQL syntax near 'INNER JOIN forum_rub R2 ON (R1.IdRubMere = R2.IdRub) WHERE R0.tid='475'' at line 1

D'avance merci pour votre aide