0

データベース:

  • 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 (SELECT * FROM xx_questions WHERE user_id IN (" . implode(',', $friend_ids_arr) . ") OR user_id = '$user' ORDER BY time DESC) (SELECT * from questions INNER JOIN users ON users.user_id = questions.user_id WHERE users.location = 'Cambridge, Cambridgeshire')";    
$data = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_assoc($data)) {
       // echo values from what's been selected
}

xx_questions次の3つの状況のいずれかが発生した場合に、(ユーザーによって投稿された)質問を選択しようとしています。

  1. ポスターのuser_idが現在のユーザーの友達の1人の値と一致する値(つまり、ポスターとユーザーは友達です)
  2. ポスターのuser_idがユーザーの値と一致する値(つまり、ポスターがユーザー)
  3. ポスターの場所が現在のユーザーの場所と一致する値(つまり、ポスターとユーザーが現在同じ都市にいる)

私はなんとか1と2を機能させることができましたが、3を導入しようとすると問題が発生するため、2つの質問は次のとおりです。

  1. 3の正しいMySQLは何ですか?
  2. それは1と2とどのように統合されていますか?

よろしくお願いします。さらに情報が必要な場合はお知らせください。

4

1 に答える 1

2

必要な情報を取得するには、xx_questionsをxx_usersに参加させる必要があります。次のようなものは、3つの条件のいずれかに一致する質問を返します。

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
      q.user_id = '$user' or
      u.location = (select location from xx_users where USER_ID = $user)

私はこれを文字列というよりもSQLのように書いたので、読みやすくなっています。

于 2012-12-17T19:44:25.673 に答える