8768 sujets

Développement web côté serveur, CMS

Bonjour,

dans une base de données j'ai une table qui contient des messages.
dans une table 'semaine_messages' j'ai le contenu du message et une référence vers l'index du destinataire et une référence vers l'index de l'émetteur du message.
Les deux protagonistes du message sont stockés dans la table 'semaine_tasks_performers' avec l'identifiant 'id_task_performer' (voir schéma).
J'ai créé 2 clés étrangères entre les tables..

Je voudrais faire une requête qui, pour une personne donnée, retourne la liste des messages qu'il a reçu avec à chaque fois le nom de l’émetteur adossé au message.
Je sais pas si c'est possible....

Pour l'instant je récupère tous les messages d'un utilisateur et quand j'affiche les messages un par un je refais une requête pour récupérer le nom de l'émetteur du message en cours .. pas top...


merci upload/1595696037-40948-sous-requete-special.jpg
Bonjour,

Je ne maîtrise pas le SQL mais il va bientôt falloir que je m'y attelle... Tu utilises un FULL JOIN pour ta requête ?
Olivier C a écrit :
Bonjour,

Je ne maîtrise pas le SQL mais il va bientôt falloir que je m'y attelle... Tu utilises un FULL JOIN pour ta requête ?


euh non et je crois même que le FULL JOIN n'est pas disponible avec MySql
PapyJP a écrit :
Peux tu nous montrer l'état actuel de ta requête?


Je n'ai pas fait la requête .. en fait je fais 2 requêtes.

d'abord je récupère tous les intervenants


$sql_task_performers = "SELECT * FROM semaine_tasks_performers st
			WHERE st.performer_active = 'y'
			ORDER BY st.perf_display_order ASC";

$req_task_performers = $db->prepare($sql_task_performers);
$req_task_performers->execute();
$res_task_performers = $req_task_performers->fetchAll(PDO::FETCH_OBJ);  



ensuite je parcours le résultat de cette requête pour extraire les expéditeurs


foreach($res_task_performers as $performer):

	$data = array(
		'id' => (int)$performer->id_task_performer
	);

	$sql_recup_messages = "SELECT *
												  FROM semaine_messages sm 
													INNER JOIN semaine_tasks_performers stp
														ON sm.id_message_sender = stp.id_task_performer
													WHERE sm.id_message_receiver = :id";
	$req_recup_messages = $db->prepare($sql_recup_messages);
	$req_recup_messages->execute($data);
	$res_recup_messages = $req_recup_messages->fetchAll(PDO::FETCH_OBJ);

endforeach;


Voila, j'espère que je me suis pas trompé, j'ai fait un condensé de mon code Smiley smile
je me demandais si on pouvait faire tout ça avec une seule requête mais j'en doute au final...
salut,

Dans ton cas j' ajouterai une nouvelle jointure:


$sql_recup_messages = "SELECT *
												  FROM semaine_messages sm 
													INNER JOIN semaine_tasks_performers stps
														ON sm.id_message_sender = stp.id_task_performer
													INNER JOIN semaine_tasks_performers stpr
														ON sm.id_message_receiver = stpr.id_task_performer
													WHERE sm.id_message_receiver = :id";



Il y a une chance que cela fonctionne Smiley cligne
Meilleure solution
Mais ça marche !!!!!!
merci à toi !!! Smiley cligne

il y avait juste une petite erreur de frappe, sur le premier ON la table est stps.id_task_performer, comme ceci


SELECT * FROM semaine_messages sm 
					INNER JOIN semaine_tasks_performers stps
						ON sm.id_message_sender = stps.id_task_performer
					INNER JOIN semaine_tasks_performers stpr
						ON sm.id_message_receiver = stpr.id_task_performer
					WHERE sm.id_message_receiver = 19



SUPER !!!