2012-03-26 7 views
2

次のコードで、私はFQLを使用してFacebook上で管理しているすべてのページを取得します。私はそれらを印刷しません。私のDBへの多数の呼び出しを避けるには? (MySQL + PHP)

$PageNames = $facebook->api('/fql', array('q' => 
     'SELECT name, page_id FROM page WHERE page_id IN (
       SELECT page_id FROM page_admin WHERE uid=me())')); 

以前は、自分のページの* page_id *を自分のDBに追加しました。私の目標は、自分のDBにまだ追加していないページを表示することです。これは正しく動作しており、コードは以下のとおりです。

foreach($PageNames['data'] as $PageName) { 
    $investigate_id = mysql_query("SELECT page_id FROM pages WHERE page_id='" 
            .$PageName['page_id']."' LIMIT 1 "); 

     if(mysql_num_rows($investigate_id) == 0) { 
     echo $PageName['page_id'].$PageName['name']; 
     } 

    } 

私の管理するすべてのページに対して何らかの理由で私が多数のDB呼び出しを避けることができるかどうかは問われます。どうすればこれを達成できますか? 1つのクエリを行いますWHERE COL INを使用

+1

一緒にIDを入れて、WHERE page_idのを使用IN(.....) –

答えて

1

あなたはFQLで得た結果からIDを収集して、その結果からDBに存在するものをフィルタリングする結果に存在している行に対してDBを照会することがあります...

$fql = <<<FQL 
SELECT name, page_id FROM page WHERE page_id IN (
    SELECT page_id FROM page_admin WHERE uid = me() 
) 
FQL; 

// Get results from API 
$pages = $facebook->api('/fql', array('q' => $fql)); 

// Collect pages for later usage by ID 
$pagesByIds = array(); 
foreach($pages['data'] as $page){ 
    $pagesByIds[$page['page_id']] = $page; 
} 

// Query DB for all pages that exists in results 
$pagesIds = implode(',', array_keys($pageByIds)); 
$res = mysql_query("SELECT page_id FROM pages WHERE page_id IN ({$pageIds})"); 

while($pageRow = mysql_fetch_assoc($res)){ 
    $pageId = $pageRow['page_id']; 

    // Remove pages that present in API results and DB 
    if (isset($pagesById[$pageId])) unset($pagesById[$pageId]); ; 
} 

// Display details for pages not existing in DB 
foreach ($pagesByIds as $page){ 
    echo "ID: {$page['page_id']}, Name: {$page['name']} \n" 
} 
+0

ありがとう、ページの名前.. – EnexoOnoma

+0

@Kaoukkos、問題が名前だけだった場合は今すぐ返信してください –

+0

ありがとうございました。いくつかの変更を加えて私のソリューションを構築するためにコードを使用しました。それは本当に私を助けました。 – EnexoOnoma

2
<?php 

$IDs = array(); 
foreach($PageNames['data'] as $PageName){ 
    $IDs[] = $PageName['page_id']; 
} 

$investigate_id = mysql_query('SELECT page_id FROM pages WHERE page_id IN (\''.implode('\', \'', $IDs)).' LIMIT 1 '); 
while($assoc = mysql_fetch_assoc($investigate_id)){ 
    // iff 
} 
?> 

するすべてのIDそう

、IN page_idの(1,3,45,6,7,6,7,5,2,1,5,76 )それはクエリでそれを行います、ちょうど結果の上にループを作成し、あなたが欲しいものを何でもしてください!

+0

エラーがありますが、わかりません。これはクエリにあります – EnexoOnoma

+0

@Davidは閉じ括弧を忘れましたIN(\ '、implode(' \ '、\' '、$ ID))。' \ ')LIMIT 1' – flo

関連する問題