Requête SQL qui marche pas

Cool-man -  
974_Vin's_974 Messages postés 554 Statut Membre -
Bonjour,

J'ai fais la table utilisateur_amis sql pour le module 'mes amis'

 +-----------------+----------------+
 | Utilisateur_id  |    ami_id      |  
 +-----------------+----------------+
 |          1      |        2       | 
 +-----------------+----------------+
 |          2      |        1       |
 +-----------------+----------------+
 |          3      |        2       | 
 +-----------------+----------------+
 |          3      |        6       |
 +-----------------+----------------+
 |          8      |        10      |
 +-----------------+----------------+


ce que je veux c'est affiché les amis en commun entre deux utilisateur qui sont pas forcément ami
j'ai fait la requête suivante

$recuper = mysql_query("SELECT ami_id  FROM utilisateur_ami WHERE utilisateur_id='1' AND utilisateur_id='3' GROUP BY ami_id") or die(mysql_error());

while($donne = mysql_fetch_assoc($recuper)) echo $donne['ami_id'].'<br/>';


La dans cette exemple normalement ça doit m'afficher le numéro 2, mais voila ca n'affiche RIEN (et ca me rond fout)
et quand je met un OR a la place du AND ça affiche et bien tous les amis des l'utilisateurs 3 et 1 réunis

Voila mon problème j'ai besoin d'une requête qui me donne les amis commun entre deux utilisateur.

Merci.

4 réponses

Apatik Messages postés 6040 Statut Contributeur 782
 
C'est normal:

utilisateur_id='1' signifie que utilisateur_id!='3' donc tu ne peux pas avoir l'un ET l'autre. En effet, il s'agit de deux lignes différentes, même si la valeur est la même.
0
Cool-man
 
Merci pour la réponse Apatik,

Tu n'aurai pas une idé sur la requête qu'il faut pour avoir les amis en commun entre deux utilisateur
les amis en commun des utilisateur 1 et 3 par exemple, Merci.
0
Apatik Messages postés 6040 Statut Contributeur 782
 
Il fait faire 2 requetes:
<?php
   $rep = mysql_fetch_array(mysql_query("SELECT ami_id FROM utilisateur_ami WHERE utilisateur_id='1'));
   $ami_commun = $rep[ami_id];
   $rep = mysql_fetch_array(mysql_query("SELECT utilisateur_id FROM utilisateur_ami WHERE ami_id=$ami));
   $ami = $rep[utilisateur_id];
   echo "L\'ami en commun de l'utilisateur 1 et de l'utilisateur $ami est l'utilisateur $ami_id";
?>

Si jamais tu as plusieurs amis associés au même utilisateurs, il faut faire une boucle:
<?php
   $rep = mysql_fetch_array(mysql_query("SELECT ami_id FROM utilisateur_ami WHERE utilisateur_id='1'));
   while ($ami_commun = $rep[ami_id])
   {
      $rep = mysql_fetch_array(mysql_query("SELECT utilisateur_id FROM utilisateur_ami WHERE ami_id=$ami));
      $ami = $rep[utilisateur_id];
      echo "L\'ami en commun de l'utilisateur 1 et de l'utilisateur $ami est l'utilisateur $ami_id";
   }
?>

C'est le matin, donc je suis pas sur à 100% du 2ème code.
0
974_Vin's_974 Messages postés 554 Statut Membre 102
 
Il faut en effet faire plusieurs requetes..

Tu recherches tout d'abord l'ami de l'utilisateur 1 ..

$sql = "SELECT ami_id  FROM utilisateur_ami WHERE utilisateur_id='1'";
$resultsql = mysql_query($sql) or die('Erreur SQL! '.$sql.''.mysql_error()); // en cas d'erreure
$rep = mysql_fetch_assoc($resultsql);

$ami = $rep[ami_id]

$sql2 = "SELECT utilisateur_id  FROM utilisateur_ami WHERE ami_id='$ami'";
$resultsql2 = mysql_query($sql2) or die('Erreur SQL! '.$sql2.''.mysql_error()); // en cas d'erreure
$nb=mysql_numrows($resultsql2);//Le nombre de resultat retourné est sauvegarder


L'ami numéro $ami est ami avec $nb utilisateurs :

while ($rep2 = mysql_fetch_assoc($resultsql2))
{ 
echo $rep2['utilisateur_id'] //Affichage de tous les utilisateurs ayant pour ami le ami_id = $ami
}



Voila en espérant qu'tai compris un peu ;)

Cordialement..

0