データベース:
- 表#1:xx_users(id、name、user_id、location、network)
- 表#2:xx_questions(id、user_id、time)
コード:
$friends = $facebook->api('/me/friends');
$arr = $friends['data'];
$friend_ids_arr = array();
foreach($arr as $friend) {
$friend_ids_arr[] = $friend['id'];
}
$sql = "SELECT q.*, u.location, u.network
FROM xx_questions q
JOIN xx_users u
ON q.user_id = u.user_id
AND (q.user_id = $user) OR
q.user_id IN (".implode(',', $friend_ids_arr).") OR
u.location = (SELECT location FROM xx_users WHERE user_id = $user) OR
u.network = (SELECT network FROM xx_users WHERE user_id = $user)
ORDER BY q.time DESC";
$data = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($data)) {
if ($row['anon'] == 1) {
$asker = "<span style='color: #333;'>Anonymous</span>";
}
else {
$asker_name = json_decode(file_get_contents("http://graph.facebook.com/".$row['user_id']))->name;
$asker = "<a href='user.php?id=".$row['user_id']."'><b>".$asker_name."</b></a>";
}
echo "<div class='question'>";
echo "<a href='q.php?id=".$row[id]."' class='left'>".$row['question']."</a><span style='color: #666'> ";
$sql2 = "SELECT * FROM xx_answers WHERE question_id = '".$row[id]."'";
$result = mysql_query($sql2);
$xxx = mysql_num_rows($result);
echo "($xxx)";
echo "</span>";
echo "<div class='right'><span style='color: #999'>";
$to_time = strtotime("now");
$from_time = strtotime(".$row[time].");
$since = $to_time-$from_time;
time_since($since);
echo " by <a href='user.php?id=".$row['user_id']."'><b>".$asker."</b></a></span></div>";
echo "<div style='clear:both;'></div>";
echo "</div>";
}
私はこのコードを使用して、データベースから3種類の質問をエコーしています。
- ユーザーがポスターを持っているFacebookの友達である場合
- ユーザーがポスターと同じ場所にいる場所
- ユーザーがポスターとネットワークを共有する場所
すべての値が2回エコーされることを除いて、これはすべて正常に機能します。奇妙なことに、上記の3つのうちの1つだけをエコーすると、意図したとおりに値が1回だけエコーされます。なぜこれが起こっているのか考えていますか?