0

ファンテーブルをチェックして、あなたをファンにしたすべての人を取得するコードスニペットがあります。次に、ファンがいるかどうかもチェックし、ファンが付いている場合は、ユーザー名とプロフィール写真を表示します。

$ countを使用してそれらを扇動したかどうかをチェックします。これは、つまずく場所だと思います。しかし、firebugはエラーを表示していません。

<?php $friendlist = mysql_query("SELECT * FROM fans WHERE username='$user'") or die(mysql_error());
        while($row = mysql_fetch_array($result1)) {
            $friendname = $row['fanned'];
            $friendlist2 = mysql_query("SELECT * FROM fans WHERE username='$friendname' AND fanned='$user'") or die(mysql_error());
            $count = mysql_num_rows($friendlist2);
            if($count == 1 ){
                $avatar = mysql_query("SELECT * FROM users WHERE username='$friendname'") or die(mysql_error());
                while($row3 = mysql_fetch_assoc($avatar)) {
                $filename = $row3['avatar'];
                if($filename != "") { 
                            $friendpic = '<img id="headeravapic" src="profileavatars/' . $friendname . "/" . $filename . '" />';
                        }
                        else {
                            $friendpic = '<img id="headeravapic" src="images/nopic.PNG" />';
                        }
        echo '<div align="center" id="onlinepic">' . $friendpic . '<p />' . $friendname . '</div>'; 
                }
            }
        }?>
4

1 に答える 1

1

これを1つのクエリに簡略化できます。何かのようなもの:

SELECT f.*, u.avatar, f2.username as YouFanThem
   FROM fans f
       LEFT JOIN fans f2 ON f.fanned=f2.username and f2.fanned='$user'
       LEFT JOIN users u ON f.fanned=u.username
   WHERE f.username='$user'
while($row = mysql_fetch_array($result1)) { 
    $FriendName = $row['fanned'];
    $Avatar = $row['avatar'];
    $MutualFriend = (empty($row['YouFanThem']) ? false : true);
}

相互のファンである人だけに制限したい場合は、「LEFTJOIN」を「INNERJOIN」に変更します。結果として「YouFanThem」も必要ありません。

また、「SELECT *」は重いので使用せず、必要なフィールドだけを選択することをお勧めします。

最後に、mysql_functionsが減価償却されていることに注意してください。代わりに、PDOを確認してください。

于 2012-06-20T04:48:39.437 に答える