Jointure qui ne fonctionne pas
12 messages
• Page 1 sur 1
- fabrice88
- WRInaute occasionnel

- Messages: 289
- Inscription: 15 Oct 2007
Jointure qui ne fonctionne pas
Bonjour,
je suis en train de mettre ne place un mini forum sur mon site.
indépendement les données s'affichent bien :
requet pour affichage des sujets :
et requette pour affichage des messages :
maintenant j'essai d'afficher sur la meme page a la foi le sujet et les messages mais je n'ai rien du tout qui s'affiche.
j'essai de faire une jointure mais je n'ai rien qui s'affiche.
Voyez vous ou peut etre mon erreur ?
je suis en train de mettre ne place un mini forum sur mon site.
indépendement les données s'affichent bien :
requet pour affichage des sujets :
- Code: Tout sélectionner
$req = mysql_query("SELECT id, auteur, titre, date_derniere_reponse FROM forum_sujets ORDER BY date_derniere_reponse DESC");
et requette pour affichage des messages :
- Code: Tout sélectionner
$sql = 'SELECT auteur, message, date_reponse FROM forum_reponses WHERE correspondance_sujet="'.$_GET['id_sujet_a_lire'].'" ORDER BY date_reponse ASC';
maintenant j'essai d'afficher sur la meme page a la foi le sujet et les messages mais je n'ai rien du tout qui s'affiche.
j'essai de faire une jointure mais je n'ai rien qui s'affiche.
- Code: Tout sélectionner
$req = mysql_query("SELECT DISTINCT forum_sujets.id, auteur, titre, date_derniere_reponse FROM forum_sujets LEFT JOIN forum_reponses ON (forum_reponses.correspondance_sujet = forum_sujets.id);");
Voyez vous ou peut etre mon erreur ?
-

Dr DLP - WRInaute impliqué

- Messages: 673
- Inscription: 28 Juin 2003
Re: Jointure qui ne fonctionne pas
- Code: Tout sélectionner
$req = mysql_query("SELECT DISTINCT t1.id, auteur, t1.titre, t1.date_derniere_reponse, t2.message FROM forum_sujets AS t1,forum_reponses AS t2
WHERE t2.correspondance_sujet = t1.id;");
Pourquoi vouloir faire une jointure?
Le LEFT JOIN sur une table 2 ne sert que si tu n'es pas sûr qu'elle renvoit une réponse, ou si elle en renvoit plusieurs.
Pour une correspondance exacte, voir plus haut
- fabrice88
- WRInaute occasionnel

- Messages: 289
- Inscription: 15 Oct 2007
Re: Jointure qui ne fonctionne pas
Bonjour,
même en utilisant cette solution je n'ai aucunes données qui s'affichent.
j'ai repris telque ta requette, puis je l'ai modifié lais toujours rien aucunes données.
avec left joint sa fonctionne en partie mais le probleme est que si il y a plusieurs réponses il m'affiche plusieur fois le titre de la table forumssujet avec un reponse a chaque fois en dessous ?
même en utilisant cette solution je n'ai aucunes données qui s'affichent.
j'ai repris telque ta requette, puis je l'ai modifié lais toujours rien aucunes données.
- Code: Tout sélectionner
$req = mysql_query("SELECT DISTINCT forum_sujets.id, forum_sujets.auteur, forum_sujets.titre, forum_sujets.date_derniere_reponse, forum_reponses.message FROM forum_sujets AS forum_sujets.id,forum_reponses AS forum_reponses WHERE forum_reponses.correspondance_sujet = forum_sujets.id;");
avec left joint sa fonctionne en partie mais le probleme est que si il y a plusieurs réponses il m'affiche plusieur fois le titre de la table forumssujet avec un reponse a chaque fois en dessous ?
- Code: Tout sélectionner
SELECT * FROM forum_sujets INNER JOIN forum_reponses ON forum_reponses.correspondance_sujet = forum_sujets.id
-

YoyoS - WRInaute accro

- Messages: 3835
- Inscription: 14 Sep 2006
Re: Jointure qui ne fonctionne pas
J'ai pas trop compris ce que tu voulais afficher et sous quelle form. Qu'est-ce que tu as comme données dans tes tables, on peut avoir quelques lignes de chaque ainsi que leur structure ?
Si tu veux juste afficher un titre et ses sujets bah oui une simple jointure suffit. Si ca suffit pas c'est qu'il y a un problème quelque part soit dans la structure des tables, soit au niveau des données. Tu peux aussi faire 2 requêtes séparément si tu n'as vraiment pas besoin des infos du sujet dans chaque réponse.
Si tu veux juste afficher un titre et ses sujets bah oui une simple jointure suffit. Si ca suffit pas c'est qu'il y a un problème quelque part soit dans la structure des tables, soit au niveau des données. Tu peux aussi faire 2 requêtes séparément si tu n'as vraiment pas besoin des infos du sujet dans chaque réponse.
- DadouDuck
- WRInaute impliqué

- Messages: 910
- Inscription: 28 Mai 2007
Re: Jointure qui ne fonctionne pas
Et plus simplement sans distinct
- Code: Tout sélectionner
SELECT
a.id AS id_sujet,
a.auteur AS id_auteur,
a.titre,
a.date_derniere_reponse,
b.id,
b.auteur,
b.message,
b.date_reponse
FROM
forum_sujets a,
forum_reponses b
WHERE
a.id=b.correspondance_sujet
ORDER BY
a.date_derniere_reponse DESC,
b.date_reponse ASC
- DadouDuck
- WRInaute impliqué

- Messages: 910
- Inscription: 28 Mai 2007
Re: Jointure qui ne fonctionne pas
Tu aurais construit tes deux tables avec des libellés distinct la requête serait plus simple :
forum_sujets :
- id_forum_sujet
- id_auteur_sujet
- titre
- date_derniere_reponse
et
forum_reponses
- id_forum_reponses
- auteur_forum_reponses,
- message,
- date_reponse,
- id_forum_sujet
et la requête :
forum_sujets :
- id_forum_sujet
- id_auteur_sujet
- titre
- date_derniere_reponse
et
forum_reponses
- id_forum_reponses
- auteur_forum_reponses,
- message,
- date_reponse,
- id_forum_sujet
et la requête :
SELECT * FROM forum_sujets NATURAL JOINT forum_reponses ORDER BY date_derniere_reponse DESC, date_reponse ASC
- DadouDuck
- WRInaute impliqué

- Messages: 910
- Inscription: 28 Mai 2007
Re: Jointure qui ne fonctionne pas
Et alors? je lui donne des requêtes propres qui normalement donnent des résultats, si il en obtient pas, c'est que les tables sont soit mal remplies, soit mal conçues pour faire la jointure, et c'est pour cela que pour le natural j'ai donné une structure de table avec
- fabrice88
- WRInaute occasionnel

- Messages: 289
- Inscription: 15 Oct 2007
Re: Jointure qui ne fonctionne pas
bon alors voilà mes 2 tables :
Et je veus donc afficher sur ma page :
l'auteur, le titre, la date de la derniere reponse et une partie du message.
quand je cliquerai sur une des titre (qui n'apparait qu'une seule fois) j'irai sur une autre page qui detailerra le message et ses reponses.
- Code: Tout sélectionner
CREATE TABLE `forum_reponses` (
`id` int(6) NOT NULL auto_increment,
`auteur` varchar(30) collate latin1_german2_ci NOT NULL,
`message` text collate latin1_german2_ci NOT NULL,
`date_reponse` datetime NOT NULL default '0000-00-00 00:00:00',
`correspondance_sujet` int(6) NOT NULL,
PRIMARY KEY (`id`)
) ;
CREATE TABLE `forum_sujets` (
`id` int(6) NOT NULL auto_increment,
`auteur` varchar(30) collate latin1_german2_ci NOT NULL,
`titre` text collate latin1_german2_ci NOT NULL,
`date_derniere_reponse` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ;
Et je veus donc afficher sur ma page :
l'auteur, le titre, la date de la derniere reponse et une partie du message.
quand je cliquerai sur une des titre (qui n'apparait qu'une seule fois) j'irai sur une autre page qui detailerra le message et ses reponses.
-

YoyoS - WRInaute accro

- Messages: 3835
- Inscription: 14 Sep 2006
Re: Jointure qui ne fonctionne pas
Tu parles d'un message(réponse) ou d'un message(topic) ? Encore pas clair 
Bon je viens de tester avec tes tables, et ceci fonctionne. Ca te ramène Les derniers topics avec leur dernier message sur une ligne.
Tape ça dans phpMyAdmin pour voir ? Moi ca m'a donné :
Bon je viens de tester avec tes tables, et ceci fonctionne. Ca te ramène Les derniers topics avec leur dernier message sur une ligne.
- Code: Tout sélectionner
select s.*,r.* from forum_sujets s
inner join forum_reponses r on (s.id = r.correspondance_sujet)
where r.id = (select max(id) from forum_reponses where correspondance_sujet = s.id)
order by r.date_reponse desc
Tape ça dans phpMyAdmin pour voir ? Moi ca m'a donné :
- Code: Tout sélectionner
id auteur titre date_derniere_reponse id auteur message date_reponse Décroissant correspondance_sujet
1 monauteur montitre 2011-05-18 00:00:00 4 qqsdqsd qsdqd 2011-05-18 00:00:00 1
2 heheauteur hehetitre 2010-05-25 00:00:00 3 qsqsd qsdqs 2010-05-25 00:00:00 2
Dernière édition par YoyoS le Lun Mai 24, 2010 21:55, édité 1 fois.
- fabrice88
- WRInaute occasionnel

- Messages: 289
- Inscription: 15 Oct 2007
Re: Jointure qui ne fonctionne pas
Super sa fonctionne. bon j'ai adapté mais c pareil (enfin je pense)
j'ai fais ceci (sa fait gros mais sa marche) :
j'ai fais ceci (sa fait gros mais sa marche) :
- Code: Tout sélectionner
$req = mysql_query("SELECT forum_sujets.id, forum_sujets.auteur, forum_sujets.titre, forum_sujets.date_derniere_reponse, forum_reponses.message, forum_reponses.correspondance_sujet FROM forum_sujets INNER JOIN forum_reponses ON (forum_reponses.correspondance_sujet = forum_sujets.id) group by forum_sujets.id order by forum_sujets.date_derniere_reponse desc,forum_reponses.date_reponse desc");
-

YoyoS - WRInaute accro

- Messages: 3835
- Inscription: 14 Sep 2006
Re: Jointure qui ne fonctionne pas
non ça marche pas ta requête, regarde bien les résultats seront pas corrects. Ca prendra pas le dernier message pour ton topic. Utilise la requête que j'ai mis avec le select max(id). Ca reste le mieux à faire.
Le problème avec ta requête c'est que Mysql va grouper avant de faire l'order by, donc tu n'auras pas forcément le dernier message pour chaque topic. Et met des alias "r" et "s" par exemple, c'est beaucoup plus clair
Le problème avec ta requête c'est que Mysql va grouper avant de faire l'order by, donc tu n'auras pas forcément le dernier message pour chaque topic. Et met des alias "r" et "s" par exemple, c'est beaucoup plus clair
12 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- TouchGraph GoogleBrowser v1.0
- Google affiche des liens vers des plans de villes
- Des remontées de Yahoo News dans les résultats web
- Lancement du nouveau chat de WebRankInfo
- Click-to-Call AdWords (Pay-per-Call de Google)
- Google AdWords Editor
- La calculatrice Google
- La grogne contre AutoLink (Google Toolbar)
Qui est en ligne
Utilisateurs parcourant ce forum: Robinson et 2 invités
