0

友達リストを返す関数があります。唯一の問題は、$user_id でないものに応じて、wallfriends.mem_id_from または wallfriends.mem_id_to のいずれかから配列プッシュしたいことです。

また

すべてを 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 に答える