$ query - >从用户那里得到所有“朋友”,但是每个朋友都会得到双倍的好处

时间:2011-02-02 01:19:21

标签: php sql mysql

basicalli,我有一张桌子:朋友[id,fromid,toid] [fromid]和[toid]代表用户的ID, fromid 是谁,以及 toid 谁被接受。

我认为两个用户的朋友'对于每个用户的朋友表中的项目。

示例:当我有:

时,用户1是用户2的朋友 表朋友中的

:[id,1,2],[id,2,1],....

我正在尝试这个查询,正如我在标题中所说的那样让我成为'朋友',但两次:S

 $sqlQueryCat5 = mysql_query("SELECT friends.*,usuarios.alias AS nombre_amigo  FROM friends LEFT JOIN usuarios ON friends.toid=usuarios.id AND friends.fromid='$this->id' ORDER BY id");

我不知道为什么......而你呢?

谢谢

2 个答案:

答案 0 :(得分:1)

看起来你还有另一个你没有在这里显示的查询 此查询本身仅向朋友显示一次,因为friends.fromid='$this->id'表示fromid只能是要求的ID。

如果你的表总是包含[1,2]和[2,1](两者),那么你只需要查询一方来获得另一方。

SELECT friends.*,usuarios.alias AS nombre_amigo  
FROM usuarios
INNER JOIN friends ON friends.fromid=usuarios.id
WHERE usuarios.id='$this->id' 
ORDER BY id

答案 1 :(得分:1)

由于你的JOIN不限制你的查询结果(因为它是LEFT JOIN而不是INNER JOIN),我猜你想把朋友限制器移到你的WHERE子句中,如下所示:

$sqlQueryCat5 = mysql_query("SELECT friends.*, usuarios.alias AS nombre_amigo "
. "FROM friends "
. "LEFT JOIN usuarios ON friends.toid=usuarios.id "
. "WHERE friends.fromid=$this->id"
. "ORDER BY id");

编辑:再次查看你的查询,我猜你实际上没有理由使用LEFT JOIN - 把它变成常规的JOIN,你至少可以看到更好的性能。 / p>