0

我有一个返回朋友列表的函数,唯一的问题是我想从 wallfriends.mem_id_from 或 wallfriends.mem_id_to 进行数组推送,具体取决于哪个不是 $user_id。

或者

我可以在 SQL 中完成所有操作吗?

有人知道我会怎么做吗?提前感谢您的帮助。

function returnFreinds($user_id)
{
    $recget = mysql_query("
    SELECT * FROM wallusers 
    INNER JOIN wallfriends ON wallusers.mem_id = ".( $user_id == "wallfriends.mem_id_to"?"wallfriends.mem_id_from":"wallfriends.mem_id_to")."
    WHERE ((wallfriends.mem_id_from =".$user_id.") OR (wallfriends.mem_id_to =".$user_id.")) AND wallfriends.confirm=1
    ");

    $friends_list = array();

    if (@mysql_num_rows($recget))
    {
        while ($named = @mysql_fetch_array($recget))
        {
            array_push($friends_list, $named['mem_id']);
        }

        $matches = implode(',', $friends_list);
    }
    else 
        $matches = 0;
    return $matches;
}
4

2 回答 2

1

根据我从您的问题中了解到的情况,您可以以push与构建 SQL 查询时相同的方式区分 at ing,可能类似于

while ($named = mysql_fetch_array($recget))
{
    array_push($friends_list,
               empty($named['mem_id_to']) ? $named['mem_id_from'] : $named['mem_id_to']
    );
}

此外,建议不要抑制@操作员的错误。

于 2012-12-18T14:24:42.943 回答
0

不确定我的问题是否正确,但是如何拆分查询?

( SELECT * FROM wallusers 
  INNER JOIN wallfriends ON wallusers.mem_id = wallfriends.mem_id_from
  WHERE wallfriends.mem_id_to = ". $user_id .")
  AND wallfriends.confirm = 1 )
UNION
( SELECT * FROM wallusers 
  INNER JOIN wallfriends ON wallusers.mem_id = wallfriends.mem_id_to
  WHERE wallfriends.mem_id_from = ". $user_id. ")
  AND wallfriends.confirm = 1 )
于 2012-12-18T14:30:15.367 回答