Problème de liaison entre les bdd

Ce topic a été résolu
guewen

guewen Le 25 avril 2016 à 20:01 (Édité le 25 janvier 2019 à 17:50)

Bonjour à tous !
Je suis en train de creer un réseau social pour me faire plaisir. Tout est presque fait sauf que j'ai un petit soucis au niveau d'un passage :
- Afficher les actualitées des amis du connecté et les actualitées du connecté.
Je vous donne mon code... Si vous avez besoin de plus d'infos, demandez...
$req_actu = mysqli_query($connexion_base, 'SELECT * FROM actu ,amis, membre WHERE actu.id_posteur = amis.id_user_t AND amis.id_user_f="'.$_SESSION['id'].'" AND membre.id=actu.id_posteur ORDER BY actu.timestamp DESC');
while($i_actu = mysqli_fetch_array($req_actu))
PS : id_user_f = ID du connecté
id_user_t = ID de l'amis
PrimFX

PrimFX Le 25 avril 2016 à 21:03

Salut ! Je pense que quelques précisions s'imposent histoire de bien voir quel est le problème et d'où il vient...

Il faudrait dans un premier temps que tu nous donnes quelques screens de ta base de donnée, notamment des tables que tu utilises ici. Cela nous permettrait de voir quelle est la structure de chaque table et comment les tables actu, amis et membre sont liées entre elles 😉
Ce qui pourrait aussi être cool, c'est de nous dire quelles actus doivent s'afficher pour "le connecté" et quelles actus doivent s'afficher pour les amis de celui-ci. Car encore une fois, on ne connait ni ton site ni sa manière de fonctionner et de trier les actualités. Il est donc impossible, à ce stade, de deviner comment sont triées ces actus.

Sinon, pour tes requêtes sur la base de donnée, je te conseillerais vivement de te mettre à utiliser la connexion via la librairie PDO, étant donné que tout ce qui est mysqli_ est devenu totalement obsolète 😋

@+
guewen

guewen Le 25 avril 2016 à 21:15

@PrimFX Merci de te réponse 😉
Table Membre et Données Membre : 




Table Amis et Données Amis : 




Table et Données Actu : 





Donc comme vous le voyez, l'user 1 est amis avec l'user 2.

Donc, avec mon code ou avec un nouveau code (peut-importe), j'aimerai dire à la requête :
- Tu vas chercher les actus du connecté donc de l'id 1 dans ce cas
- Tu vas aussi chercher les actus des amis du membre avec l'id 1 donc le membre n°2 aussi.

Facile a faire en deux requête mais je voudrais mettre sa par ordre de date... 
Merci de votre aide
guewen

guewen Le 26 avril 2016 à 18:58

Toujours pas de réponses malgré les infos ?
PrimFX

PrimFX Le 26 avril 2016 à 19:22

Salut ! Pour les infos de la personne connectée, si je comprend bien, tu veux uniquement les infos postées par cette personne, identifiable via l'ID... Du coup, tu peux juste utiliser un WHERE pans ta requête pour que l'ID du posteur corresponde à l'ID de la personne connectée. Enfin, pour trier par date décroissante, tu as juste à utiliser ORDER BY ... DESC 😉
<?php
$req = $bdd->prepare('SELECT * FROM actu WHERE id_posteur = ? ORDER BY timestamp DESC');
$req->execute(array($_SESSION['id']));
?>
Pour le deuxième cas où tu souhaites afficher les actus des amis de la personne connectée, c'est effectivement plus délicat, car il faut utiliser les jointures entre tables, afin de faire comprendre à SQL que tu veux lier les amis de la personne connectée et récupérer les ID de ses amis...
<?php
$req = $bdd->prepare('SELECT actu.* FROM membre RIGHT JOIN amis ON membre.id = amis.id_user_f RIGHT JOIN actu ON actu.id_posteur = amis.id_user_t WHERE membre.id = ? ORDER BY actu.timestamp DESC');
$req->execute(array($_SESSION['id']));
?>
Par contre, je ne sais pas à quoi correspond id_user_f et id_user_t dans ta table amis, donc il est possible qu'ils soient dans le mauvais ordre... Enfin je te laisse vérifier ça, je t'ai donné une bonne base de requête pour afficher ces actualités, après c'est à toi de modifier ça en fonction de tes besoins et de ce que tu veux afficher 😉
guewen

guewen Le 26 avril 2016 à 20:36

Voilà, on y est 😉 Je voulais à peut près ce résultat sauf qu'il faudrait combiner les deux requêtes pour ne pas avoir deux types de messages. Enfin je ne souhaite pas séparer les ACTUS des amis et du connecté..
PrimFX

PrimFX Le 26 avril 2016 à 21:51

Dans ce cas, ajouter une deuxième condition au second "ON" de la requête devrait faire l'affaire 😉
<?php
$req = $bdd->prepare('SELECT actu.* FROM membre RIGHT JOIN amis ON membre.id = amis.id_user_f RIGHT JOIN actu ON actu.id_posteur = amis.id_user_t OR actu.id_posteur = membre.id WHERE membre.id = ? ORDER BY actu.timestamp DESC');
$req->execute(array($_SESSION['id']));
?>
Mais à nouveau, c'est du code fait à la volée, sans voir vraiment le résultat, donc il se peut que le résultat ne soit pas le bon, enfin je te laisse tester :p
guewen

guewen Le 27 avril 2016 à 08:48

Je test le code et je te dis 😉 Sinon, c'est pas grave, merci de m'avoir aidé 😉
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte