2011-03-06 73 views
2
//get all id's of ur friend that has installed your application 
$friend_pics=$facebook->api(array('method' => 'fql.query', 'query' => "SELECT uid FROM user WHERE uid IN(SELECT uid2 from friend WHERE uid1='$user') AND is_app_user = 1")); // this query work fine 
//your top10 friends in app 
$result="SELECT * FROM fb_user WHERE user_id IN($friend_pics) ORDER BY oldscore DESC LIMIT 0,10"; 
db_execute($result); 

我想從存儲在oldscore但在我的第二個查詢數組名$ friend_pics我的數據庫retrive十大射手不工作我想,plz幫助我感謝如何在MySQL查詢的'IN'子句中使用來自PHP的數組值?

+0

你需要發佈更多的代碼和/或您的數據庫架構。這裏可能有很多問題。這是不夠的信息。 – bonez 2011-03-06 00:10:05

+0

希望啓用佔位符的訪問方法之一(mysqli或pdo)支持這樣的構造(無論如何都應該使用它們)。 – 2011-03-06 00:17:18

回答

1

你爲什麼不轉換數組轉換成你的值的長列表的字符串,除非數組是巨大的大小。

$ids = array(2, 4, 6, 8); 
$params = implode(",", array_fill(0, count($ids), "?")); 

    $result="SELECT * FROM fb_user WHERE user_id IN($params) ORDER BY oldscore DESC LIMIT 0,10"; 
db_execute($result); 
+0

我應該怎麼做才能得到wt我想要的? – 2011-03-06 00:25:14

+0

$ friendsAp = implode(「,」,$ friendpics);我已經這樣做了,但不工作 – 2011-03-06 00:26:20

+0

你得到什麼錯誤? – yogsma 2011-03-06 00:30:03

1

$friend_pics應含有逗號分隔的列表即 「1,2,3,4」 的字符串。如果不是,那麼你的第二個查詢將總是失敗。

+0

這個工作完美 – 2011-03-06 23:24:45

+0

這工作完美$ friend_pics = $ facebook-> api(數組('方法'=>'fql.query','查詢'=>「選擇用戶來自用戶在哪裏用戶名(從用戶選擇uid2在哪裏uid1 ='$ user')AND is_app_user = 1「)); foreach($ friend_pics as $ status_a){ $ status_sql [] ='\''。$ status_a ['uid']。'\''; } $ status = implode(',',$ status_sql); $ result =「SELECT * FROM fb_user WHERE user_id IN($ status)ORDER BY oldscore DESC LIMIT 0,10」; db_execute($ result);這是該死的儀式,求你幫助我們 – 2011-03-06 23:26:19

3

這沒有本地支持。即使綁定的參數API也不允許爲IN子句使用數組。你必須構建具有一些輔助代碼查詢:

$friend_pics = array_map("mysql_real_escape_string", $friend_pics); 
$friend_pics = "'" . implode("', '", $friend_pics) . "'"; 
"SELECT * WHERE user_id IN ($friend_pics)    " 

一個更簡單的選擇將是mysqls FIND_IN_SET()但是:

$friend_pics = mysql_real_escape_string(implode(",", $friend_pics)); 
"SELECT * FROM fb_user WHERE find_in_set(user_id,'$friend_pics')  " 
相關問題