ユーザーが他のユーザーをフォローし、フォローされることができるアプリを構築しています。
ユーザーは、別のユーザーが誰をフォローしているかを確認することもできます。
ここで、user1がuser2がフォローしている人を見ているとしましょう。user2 がフォローしているすべての人の ID を見つけて、user1 がフォローしている人と比較する必要があります。
user1 と user2 の両方に一致するすべてのユーザーの ID のみを返すのではなく (他のフォーラムで見たことがあります)、user2 のすべてのフォロー ID とユーザー名、およびフォローされている人がフォローされているかどうかを示すフラグを取得する必要があります。また、user1 が続きます。
各クエリの二重 for ループを使用して PHP で動作するようにしましたが、このコードは高価であり、単一の MYSQL クエリではるかに最適化されるのではないかと心配しています。
関連するテーブルと列:
following_table
follower_id
followed_id
following: varchar -- 'true' or 'false'
user_table
user_id
user_name
ここに私のPHPコードがあります:
$user_id1 = '1991';
$myFollowingQuery = "SELECT following_table.followed_id, user_table.user_name
FROM following_table
INNER JOIN user_table ON
following_table.followed_id = user_table.user_id
WHERE following_table.following = 'true'
AND following_table.follower_id = '$user_id1'";
$user_id2 = '1985';
$userFollowingQuery = "SELECT following_table.followed_id, user_table.user_name
FROM following_table
INNER JOIN user_table ON
following_table.followed_id = user_table.user_id
WHERE following_table.following = 'true'
AND following_table.follower_id = '$user_id2'";
$userFollowingResult = mysql_query($userFollowingQuery)
or doResponse('error',"Couldn't connect to the database");
$myFollowingResult = mysql_query($myFollowingQuery)
or doResponse('error',"Couldn't connect to the database");
for($i = 0; $i< mysql_num_rows($userFollowingResult);$i++){
$loopArray = array(followed_id => mysql_result($userFollowingResult,$i,"followed_id"),
followed_name => mysql_result($userFollowingResult,$i,"user_name"));
for($j = 0; $j< mysql_num_rows($myFollowingResult);$j++){
if(mysql_result($userFollowingResult,$i,"followed_id")
==mysql_result($myFollowingResult,$j,"followed_id")) {
$loopArray['is_following'] = 'true';
break;
}
if($j==mysql_num_rows($myFollowingResult)-1){
$loopArray['is_following'] = 'false';
break;
}
}
$resultArray[$i] = $loopArray;
}
echo json_encode($resultArray);