データベース:
- xx_users(id、name、user_id、email、location)
- xx_questions(id、question、description、user_id)
元のコード:
$friends = $facebook->api('/me/friends');
$arr= $friends['data'];
$friend_ids_arr = array();
foreach($arr as $friend) {
$friend_ids_arr[] = $friend['id'];
}
$sql = "SELECT * FROM xx_questions WHERE user_id IN (" . implode(',', $friend_ids_arr) . ") OR user_id = '$user' ORDER BY time DESC";
新しいコード:
$friends = $facebook->api('/me/friends');
$arr= $friends['data'];
$friend_ids_arr = array();
foreach($arr as $friend) {
$friend_ids_arr[] = $friend['id'];
}
$sql = "SELECT *
FROM xx_questions q JOIN xx_users u ON
q.user_id = u.user_id
WHERE q.user_id IN (implode(',', $friend_ids_arr)) OR // STEP 1
q.user_id = '$user' OR // STEP 2
u.location = (SELECT location FROM xx_users WHERE user_id = $user) // STEP 3
ORDER BY q .time DESC";
$data = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($data)) {
echo $row[id];
}
次の3つの状況のいずれかが発生した場合に、xx_questions(ユーザーによって投稿されたもの)から質問を選択しようとしています。
- ポスターのuser_idが現在のユーザーの友達の1人の値と一致する値(つまり、ポスターとユーザーは友達です)
- ポスターのuser_idがユーザーの値と一致する値(つまり、ポスターがユーザー)
- ポスターの場所が現在のユーザーの場所と一致する値(つまり、ポスターとユーザーが現在同じ都市にいる)
私は元々ステップ1と2を達成していましたが、ステップ3を追加すると、次の2つのことが起こります。
- ステップ1が機能しなくなります(つまり、現在のユーザーからの投稿と同じ都市の人々のみが返されます)
- whileループでエコーされるの
$row[id]
は、xx_questionsではなくxx_usersのエコーです。私は試しまし$row[q.id]
たが、役に立ちませんでした。
何がうまくいかなかったのか分かりますか?