如何避免大量呼叫我的数据库?(MySQL和PHP)

如何避免大量呼叫我的数据库?(MySQL和PHP),php,mysql,facebook,facebook-fql,Php,Mysql,Facebook,Facebook Fql,通过下面的代码,我可以使用FQL获得我在Facebook上管理的所有页面。但我不打印它们 $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() )')); 以前,我在数据库中添加了一些页面的*pa

通过下面的代码,我可以使用FQL获得我在Facebook上管理的所有页面。但我不打印它们

$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*。我的目标是显示尚未添加到数据库中的页面。它工作正常,代码如下

  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调用,因为它会对我管理的每个页面进行查询。如何实现这一点?

您可以从使用FQL获得的结果中收集ID,然后查询数据库中结果中存在的行,以从结果中筛选数据库中存在的行

<?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
}
?>
$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"
}

$fql=将id放在一起并使用WHERE page_id IN(…)有一个错误,但我无法找出它。在电视上query@David忘记了结束括号,在(\''.intlode('\',\'',$IDs))。\')LIMIT 1'@Kaoukkos中,如果问题只是名称,现在应该将其装箱谢谢您的回复。我使用您的代码构建了我的解决方案,并做了一些更改。我已经测试过你的方法,但是它并没有“隐藏”数据库中的页面。相反,它显示所有页面。