Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: guewen
Ce topic a été résolu
Auteur Sujet: Problème de liaison entre les bdd

guewen

Messages: 37

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

PrimFX
Membre Premium

Messages: 113

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 Clin d'oeil
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 Tire la langue

@+

guewen

Messages: 37

@PrimFX Merci de te réponse Clin d'oeil
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

Messages: 37

Toujours pas de réponses malgré les infos ?

PrimFX
Membre Premium

Messages: 113

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 Clin d'oeil
<?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 Clin d'oeil

guewen

Messages: 37

Voilà, on y est Clin d'oeil 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
Membre Premium

Messages: 113

Dans ce cas, ajouter une deuxième condition au second "ON" de la requête devrait faire l'affaire Clin d'oeil
<?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

Messages: 37

Je test le code et je te dis Clin d'oeil Sinon, c'est pas grave, merci de m'avoir aidé Clin d'oeil


Veuillez vous connecter ou créer un compte pour poster une réponse