Problème de liaison entre les bdd
- Accueil
- Forum
- Programmation
- PHP
- Problème de liaison entre les bdd
guewen Le 25 avril 2016 à 20:01 (Édité le 25 janvier 2019 à 17:50)
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 Le 25 avril 2016 à 21:03 (Édité le 1 janvier 1970 à 01:00)
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 Le 25 avril 2016 à 21:15 (Édité le 1 janvier 1970 à 01:00)
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 Le 26 avril 2016 à 18:58 (Édité le 1 janvier 1970 à 01:00)
PrimFX Le 26 avril 2016 à 19:22 (Édité le 1 janvier 1970 à 01:00)
<?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 Le 26 avril 2016 à 20:36 (Édité le 1 janvier 1970 à 01:00)
PrimFX Le 26 avril 2016 à 21:51 (Édité le 1 janvier 1970 à 01:00)
<?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 Le 27 avril 2016 à 08:48 (Édité le 1 janvier 1970 à 01:00)