2

データベース:

テーブル #1: xx_users (ID、名前、user_id、場所、ネットワーク)

表 #2: xx_questions (id、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 q.*, u.location, u.network
            FROM xx_questions q 
            JOIN xx_users u 
            ON q.user_id = u.user_id
            WHERE 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";

問題の行は、コメントアウトされたアスタリスクが付いた行です。質問者の ID がユーザーの Facebook の友達の ID と一致するすべての質問を選択することになっていますが、何も選択しません。何が問題なのですか?

編集

SQL 出力は次のとおりです。

SELECT q.*, u.location, u.network
FROM xx_questions q JOIN xx_users u
ON q.user_id = u.user_id
WHERE q.user_id = 528782060 OR q.user_id IN (123456, 234567 etc) OR
u.location = (SELECT location FROM xx_users WHERE user_id = 528782060) OR
u.network = (SELECT network FROM xx_users WHERE user_id = 528782060)
ORDER BY q.time DESC
4

1 に答える 1

3

正しいコードは次のとおりです。

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 = 528782060 OR q.user_id IN (123456, 234567 etc) OR
u.location = (SELECT location FROM xx_users WHERE user_id = 528782060) OR
u.network = (SELECT network FROM xx_users WHERE user_id = 528782060)
ORDER BY q.time DESC
于 2012-12-23T13:35:59.480 に答える